Zagnieżdżona definicja Enum Javy - czy deklarowanie jako statyczne robi różnicę? [duplikat]

To pytanie ma już odpowiedź tutaj:

Mam interfejs - oto ładnie wymyślona Wersja jako przykład:

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

Czy jest jakaś różnica w tym, jak implementacje tego zachowywałyby się, gdybym zdefiniował Charge enum jako statyczne - tzn. czy to ma jakieś efekt:

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}
Author: serg10, 2008-10-31

2 answers

Nie, to nie ma znaczenia. Jednak powodem nie jest to, że jest to deklaracja członkowska wewnątrz interfejsu, jak mówi Jon. Prawdziwy powód jest zgodny ze specyfikacją języka(8.9) że

Zagnieżdżone typy enum są domyślnie statyczne. Jest dopuszczalna do jawnie deklaruje zagnieżdżony Typ enum być statycznym.

W poniższym przykładzie statyczny również nie robi żadnej różnicy (mimo że nie mamy interfejsu):

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

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

Kolejny przykład z zagnieżdżone prywatne enum (w domyśle Nie publiczne).

public class A {
  private static enum E {A,B}
}
 83
Author: idrosid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-31 12:22:56

Nie, to nie ma znaczenia. Z sekcji Spec języka 9.5:

Interfejsy mogą zawierać typ member deklaracje (§8.5). Typ członka deklaracja w interfejsie jest implicite static i public.

 30
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-16 04:20:35