Pas directement comme vous l'avez écrit, c'est-à-dire où une valeur d'énumération est égale à un nombre, mais oui indirectement comme indiqué dans le lien de Ben S.
@Benoit Je ne pense pas que ce soit une dupe: celle-ci consiste à définir uniquement la première valeur et à incrémenter à partir de là, il s'agit de définir toutes les valeurs. Mais certainement lié.
cela fonctionnera-t-il toujours avec gson et la conversion de json.
Zapnologica
4
Vous pouvez également déclarer la variable "public final int numVal" et y accéder directement en tant que EXIT_CODE.A.numVal (je préfère le nom 'value'), sans avoir besoin d'une méthode d'accesseur. Comme il est définitif, il ne peut être défini que dans le constructeur. IMO, cela conduit à un code légèrement plus propre, mais c'est surtout une question de préférence, je suppose. L'utilisation d'une dernière variable vous permet d'économiser une définition de méthode.
Steve Ferguson
34
Oui , puis quelques exemples tirés de la documentation:
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));}}
Pourquoi votre void principal public statique (String [] args) est-il à l'intérieur de l'énumération elle-même?
IgorGanapolsky
3
@IgorGanapolsky Pour rendre l'exemple autonome, je suppose!
mat_boy
2
@IgorGanapolsky: parce qu'il en est ainsi dans la documentation officielle (suivez le lien Oui )
serv-inc
@ user1587329 Intéressant, je suppose que c'est uniquement à des fins de test. Je ne vois pas de moyen d'utiliser cela dans le code de version de production ...
IgorGanapolsky
12
En supposant que EXIT_CODE fait référence à System . exit(exit_code), vous pouvez faire
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 );}}
Ensuite, vous pouvez mettre ce qui suit aux endroits appropriés dans votre code
Si vous recherchez un moyen de regrouper des constantes dans une classe, vous pouvez utiliser une classe interne statique:
publicclassOuterClass{publicvoid exit(boolean isTrue){if(isTrue){System.exit(ExitCode.A);}else{System.exit(ExitCode.B);}}publicstaticclassExitCode{publicstaticfinalint A =203;publicstaticfinalint B =204;}}
Réponses:
la source
EXIT_CODE.A
etEXIT_CODE.B
sont les seules instances qui existeront jamais.Oui , puis quelques exemples tirés de la documentation:
la source
En supposant que EXIT_CODE fait référence à
System . exit
(exit_code), vous pouvez faireEnsuite, vous pouvez mettre ce qui suit aux endroits appropriés dans votre code
ExitCode . NORMAL_SHUTDOWN . exit ( ) '
la source
En étendant la réponse de Bhesh Gurung pour l'attribution de valeurs, vous pouvez ajouter une méthode explicite pour définir la valeur
Depuis l'appel de l'application
// Vous avez une énumération valide à partir de maintenant
[Impossible de commenter sa réponse, donc de la publier séparément]
la source
Si vous recherchez un moyen de regrouper des constantes dans une classe, vous pouvez utiliser une classe interne statique:
la source