Definición de enumeración de Java anidada: ¿la declaración como estática hace una diferencia? [duplicar]

StackOverflow https://stackoverflow.com/questions/253226

  •  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...
}
¿Fue útil?

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 y public .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top