web-dev-qa-db-fra.com

Netthed Java Enum Définition - déclare comme statique faire une différence?

J'ai une interface - voici une version joliment artificielle comme exemple:

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

Existe-t-il une différence dans la manière dont les implémentations de cela se comportent si j'ai défini le Charge Enum comme statique - c'est-à-dire que cela a-t-il un effet:

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}
54
serg10

Non, ça ne fait aucune différence. Cependant, la raison n'est pas parce que c'est une déclaration de membre à l'intérieur d'une interface, comme le dit Jon. La vraie raison est en fonction de la spécification de la langue (8,9) que

Les types d'énumités imbriqués sont implicitement statiques. Il est permis de déclarer explicitement un type d'enum imbriqué pour être statique.

À l'exemple suivant, statique ne fait aucune différence (même si nous n'avons aucune interface):

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

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

Un autre exemple avec un -privé Enum (non implicitement public).

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

Non, ça ne fait aucune différence. Du Spécification de la langue, section 9.5 :

Les interfaces peuvent contenir des déclarations de type membre ( §8.5 ). Une déclaration de type membre dans une interface est implicitement static et public.

31
Jon Skeet