2013-06-27 4 views
8

Wenn ich erklären, eine Variable vor oder ohne auf diese Weise Enum Konstanten erklärt:Warum müssen die Enum-Konstanten vor jeder anderen Deklaration von Variablen und Methoden in einem Enum-Typ deklariert werden?

enum MyEnum 
{ 
    int i = 90; 
} 

Es zeigt Kompilierungsfehler folgende.

MyEnum.java:3: <identifier> expected 
{ 
^ 
MyEnum.java:4: ',', '}', or ';' expected 
     int i = 90; 
     ^
MyEnum.java:4: '}' expected 
     int i = 90; 
      ^
MyEnum.java:5: class, interface, or enum expected 
} 
^ 
4 errors 

Aber wenn ich eine Enumeration Konstante deklarieren, bevor erklärt i dann kompiliert es in Ordnung.
Auch der folgende Code kompiliert fein:

enum MyEnum 
{ 
    ;//put a semicolon 
    int i = 90; 
} 

Warum Java-Enumeration auf diese Weise ausgelegt ist?

+0

In erster Linie soll 'enum' eine * Aufzählung * von mehr als null Elementen sein. Dieser Entwurf ist absolut gültig. –

+0

Da mindestens eine Enum-Konstante zwingend erforderlich ist. Denn so ist die Syntax in der Java Language Specification definiert. Weil. – EJP

+0

@EJP Aber in späteren Fall habe ich keine Enum-Konstante deklariert, sondern habe einfach ein Semikolon angehängt, bevor ich eine Variable deklariere. Ist es nicht gegen das Mandat, dass ein Enum mindestens eine Enum-Konstante haben sollte? –

Antwort

10

Die ; zeigt das Ende der Enum-ID-Liste an. Anscheinend können Sie eine leere Enum-Liste haben, aber Sie müssen eine haben.

Siehe 8.9.1 des Java Language Specification:

8.9.1 Enum-Konstanten
Der Körper eines Aufzählungstyp Enum enthalten

+4

Insbesondere: 'EnumBodyDeclarations: ; ClassBodyDeclarationsopt' – assylias

+0

Thnx für die schnelle Antwort und den entsprechenden Link zu JLS. Ja, ich bin durch den Link gegangen. Aber ich konnte keinen Grund für diese Desgin-Einschränkung für Enums in Java finden. Also, schließlich sollte angenommen werden, dass es nur die Art und Weise ist, wie Java Enums entworfen hat? Es gibt keine anderen Gründe wie: die Art und Weise wie Enums von JVM in Bezug auf Laden, Initialisierung oder andere ... –

2

Zwei obligatorische Teile Enum-Konstanten:

  1. Enum-Identifikatoren;
  2. enum Körper.

Sie müssen zuerst Enum Identifikatoren Liste vor Enum Körper erklären. Hier zeigt ; den ersten Teil, da der erste Teil obligatorisch ist. Wenn Sie dies ignorieren, wird ein Kompilierungsfehler erzeugt. Wenn Sie ; hinzufügen, wird es kompiliert, wie Sie beide Kriterien erfüllen.

Verwandte Themen