@ Benoit Ich glaube nicht, dass es ein Betrug ist: Bei diesem geht es darum, nur den ersten Wert festzulegen und von dort aus zu erhöhen. Hier geht es darum, alle Werte festzulegen. Aber definitiv verwandt.
funktioniert das noch mit gson und konvertiert von json.
Zapnologica
4
Sie können die Variable auch "public final int numVal" deklarieren und direkt als EXIT_CODE.A.numVal (ich bevorzuge den Namen 'value') darauf zugreifen, ohne dass eine Zugriffsmethode erforderlich ist. Da es endgültig ist, kann es nur im Konstruktor festgelegt werden. IMO führt es zu etwas saubererem Code, aber es ist meistens eine Frage der Präferenz, nehme ich an. Durch die Verwendung einer endgültigen Variablen sparen Sie eine Methodendefinition.
Steve Ferguson
34
Ja , und noch einige Beispiele aus der Dokumentation:
publicenumPlanet{
MERCURY (3.303e+23,2.4397e6),
VENUS (4.869e+24,6.0518e6),
EARTH (5.976e+24,6.37814e6),
MARS (6.421e+23,3.3972e6),
JUPITER (1.9e+27,7.1492e7),
SATURN (5.688e+26,6.0268e7),
URANUS (8.686e+25,2.5559e7),
NEPTUNE (1.024e+26,2.4746e7);// in kilogramsprivatefinaldouble mass;// in metersprivatefinaldouble radius;Planet(double mass,double radius){this.mass = mass;this.radius = radius;}privatedouble mass(){return mass;}privatedouble radius(){return radius;}// universal gravitational // constant (m3 kg-1 s-2)publicstaticfinaldouble G =6.67300E-11;double surfaceGravity(){return G * mass /(radius * radius);}double surfaceWeight(double otherMass){return otherMass * surfaceGravity();}publicstaticvoid main(String[] args){if(args.length !=1){System.err.println("Usage: java Planet <earth_weight>");System.exit(-1);}double earthWeight =Double.parseDouble(args[0]);double mass = earthWeight/EARTH.surfaceGravity();for(Planet p :Planet.values())System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));}}
Warum befindet sich Ihre öffentliche statische Leere main (String [] args) innerhalb der Aufzählung selbst?
IgorGanapolsky
3
@IgorGanapolsky Um das Beispiel in sich geschlossen zu machen, denke ich!
mat_boy
2
@IgorGanapolsky: weil es so in den offiziellen Dokumenten ist (folgen Sie dem Ja- Link)
serv-inc
@ user1587329 Interessant, ich denke, das ist nur zu Testzwecken. Ich sehe keine Möglichkeit, dies im Produktions-Release-Code zu verwenden ...
IgorGanapolsky
12
Angenommen, EXIT_CODE bezieht sich auf System . exit (exit_code), dann könnten Sie dies tun
enumExitCode{
NORMAL_SHUTDOWN (0), EMERGENCY_SHUTDOWN (10), OUT_OF_MEMORY (20), WHATEVER (30);privateint value ;ExitCode(int value ){this. value = value ;}publicvoid exit (){System. exit ( value );}}
Dann können Sie Folgendes an geeigneten Stellen in Ihren Code einfügen
Wenn Sie nach einer Möglichkeit suchen, Konstanten in einer Klasse zu gruppieren, können Sie eine statische innere Klasse verwenden:
publicclassOuterClass{publicvoid exit(boolean isTrue){if(isTrue){System.exit(ExitCode.A);}else{System.exit(ExitCode.B);}}publicstaticclassExitCode{publicstaticfinalint A =203;publicstaticfinalint B =204;}}
Antworten:
quelle
EXIT_CODE.A
undEXIT_CODE.B
sind die einzigen Instanzen, die jemals existieren werden.Ja , und noch einige Beispiele aus der Dokumentation:
quelle
Angenommen, EXIT_CODE bezieht sich auf
System . exit
(exit_code), dann könnten Sie dies tunDann können Sie Folgendes an geeigneten Stellen in Ihren Code einfügen
ExitCode . NORMAL_SHUTDOWN . exit ( ) '
quelle
Wenn Sie die Antwort von Bhesh Gurung auf die Zuweisung von Werten erweitern, können Sie eine explizite Methode zum Festlegen des Werts hinzufügen
Vom Aufruf der Anwendung
// Sie haben ab sofort eine gültige Aufzählung
[Kann seine Antwort nicht kommentieren und daher separat veröffentlichen]
quelle
Wenn Sie nach einer Möglichkeit suchen, Konstanten in einer Klasse zu gruppieren, können Sie eine statische innere Klasse verwenden:
quelle