with values valueof type example enum define java enums class-design

values - java enum valueof



Definición enum de Java anidada: ¿declarar como estático marcar la diferencia? (2)

Esta pregunta ya tiene una respuesta aquí:

Tengo una interfaz, aquí hay una versión muy 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 Charge enum como estática, es decir, si tiene algún efecto?

public interface Particle { static enum Charge { POSITIVE, NEGATIVE } Charge getCharge(); double getMass(); etc... }


No, no hace ninguna diferencia. Sin embargo, la razón no es porque sea una declaración de miembro dentro de una interfaz, como dice Jon. La verdadera razón está de acuerdo con la especificación del lenguaje ( 8.9 ) que

Los tipos enum anidados son implícitamente estáticos. Se permite declarar explícitamente que un tipo de enumeración anidado sea estático.

En el ejemplo siguiente, static tampoco hace ninguna diferencia (aunque no tengamos ninguna interfaz):

public class A { enum E {A,B}; } public class A { static enum E {A,B}; }

Otro ejemplo con una enumeración privada anidada (no implícitamente pública).

public class A { private static enum E {A,B} }


No, no hace ninguna diferencia. De la especificación de idioma, sección 9.5 :

Las interfaces pueden contener declaraciones de tipo de miembro ( §8.5 ). Una declaración de tipo de miembro en una interfaz es implícitamente static y public .