No directamente como ha escrito, es decir, donde un valor de enumeración es igual a un número, pero sí indirectamente como se muestra en el enlace de Ben S.
@Benoit No creo que sea un engaño: ese se trata de establecer solo el primer valor e incrementar a partir de ahí, se trata de establecer todos los valores. Pero definitivamente relacionado.
¿funcionará esto con gson y la conversión de json?
Zapnologica
44
También puede declarar la variable "public final int numVal" y simplemente acceder a ella directamente como EXIT_CODE.A.numVal (prefiero el nombre 'valor'), sin la necesidad de un método de acceso. Como es final, solo se puede establecer en el constructor. En mi opinión, conduce a un código ligeramente más limpio, pero supongo que es principalmente una cuestión de preferencia. El uso de una variable final le ahorra una definición de método.
Steve Ferguson
34
Sí , y luego, algunos ejemplos de la documentación:
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));}}
¿Por qué está su vacío público estático main (String [] args) dentro de la enumeración en sí?
IgorGanapolsky
3
@IgorGanapolsky ¡Para hacer que el ejemplo sea autónomo, supongo!
mat_boy
2
@IgorGanapolsky: porque así es en los documentos oficiales (siga el enlace Sí )
serv-inc
@ user1587329 Interesante, supongo que es solo para fines de prueba. No veo una manera de utilizar ese código de liberación en la producción ...
IgorGanapolsky
12
Suponiendo que EXIT_CODE se refiere a System . exit(código_salida), entonces podría hacer
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 );}}
Luego puede poner lo siguiente en los lugares apropiados de su código
Si está buscando una forma de agrupar constantes en una clase, puede usar una clase interna estática:
publicclassOuterClass{publicvoid exit(boolean isTrue){if(isTrue){System.exit(ExitCode.A);}else{System.exit(ExitCode.B);}}publicstaticclassExitCode{publicstaticfinalint A =203;publicstaticfinalint B =204;}}
Respuestas:
fuente
EXIT_CODE.A
yEXIT_CODE.B
son las únicas instancias que alguna vez existirán.Sí , y luego, algunos ejemplos de la documentación:
fuente
Suponiendo que EXIT_CODE se refiere a
System . exit
(código_salida), entonces podría hacerLuego puede poner lo siguiente en los lugares apropiados de su código
ExitCode . NORMAL_SHUTDOWN . exit ( ) '
fuente
Extendiendo la respuesta de Bhesh Gurung para asignar valores, puede agregar un método explícito para establecer el valor
Desde la aplicación de llamada
// Ya tienes una enumeración válida
[No se puede comentar su respuesta, por lo tanto, publicarla por separado]
fuente
Si está buscando una forma de agrupar constantes en una clase, puede usar una clase interna estática:
fuente