54 votes

Imbriquée Java enum définition - ne déclarer que la statique faire une différence?

J'ai une interface - voici une bien ficelé version comme exemple:

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

Est-il une différence dans la façon dont les implémentations de cette agiraient si j'ai défini l' Charge enum statiques, c'est à dire n'ont aucun effet:

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

86voto

idrosid Points 3672

Non, il ne fait aucune différence. Mais la raison n'est pas parce que c'est une déclaration d'un membre à l'intérieur d'une interface, comme Jon dit. La vraie raison est selon le langage de spec (8.9)

Imbriqués les types enum sont implicitement statique. Il n'est permis à déclarer explicitement un imbriquée type enum pour être statique.

Dans l'exemple suivant statique ne fait aucune différence non plus (même si nous n'avons pas d'interface):

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

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

Un autre exemple avec un imbriquée privé enum (pas implicitement public).

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

31voto

Jon Skeet Points 692016

Non, il ne fait aucune différence. À partir de la langue spec, l'article 9.5:

Les Interfaces peuvent contenir type de membre déclarations (§8.5). Un type de membre déclaration d'une interface implicitement static et public.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X