Definición de enumeración de Java anidada: ¿la declaración como estática hace una diferencia? [duplicar]
-
05-07-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
Tengo una interfaz: aquí hay una versión bien diseñada como ejemplo:
public interface Particle {
enum Charge {
POSITIVE, NEGATIVE
}
Charge getCharge();
double getMass();
etc...
}
¿Hay alguna diferencia en cómo se comportarían las implementaciones de esto si definiera la enumeración Charge
como estática? Es decir, esto tiene algún efecto:
public interface Particle {
static enum Charge {
POSITIVE, NEGATIVE
}
Charge getCharge();
double getMass();
etc...
}
Solución
No, no hace ninguna diferencia. Sin embargo, la razón no es porque es una declaración de miembro dentro de una interfaz, como dice Jon. La verdadera razón es según la especificación de idioma ( 8.9 ) que
Los tipos de enumeración anidados son implícitamente estático. Es permisible declarar explícitamente un tipo de enumeración anidada ser estático.
En el siguiente ejemplo, la estática tampoco hace ninguna diferencia (aunque no tenemos interfaz):
public class A {
enum E {A,B};
}
public class A {
static enum E {A,B};
}
Otro ejemplo con una enumeración privada (no es implícitamente pública).
public class A {
private static enum E {A,B}
}
Otros consejos
No, no hace ninguna diferencia. De la especificación de idioma, sección 9.5 :
Las interfaces pueden contener tipo de miembro Declaraciones ( §8.5 ) . Un tipo de miembro declaración en una interfaz es implícitamente
static
ypublic
.