2013-06-27 11 views
8

Gdybym zadeklarować zmienną przed lub bez deklarowania stałych enum w ten sposób:Dlaczego stałe enum muszą być zadeklarowane przed innymi zmiennymi i deklaracjami metod w typie wyliczeniowym?

enum MyEnum 
{ 
    int i = 90; 
} 

pokazuje następujący błąd kompilacji.

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 

Ale jeśli zadeklarować stałą enum przed oświadczając i następnie kompiluje grzywny.
Nawet następujący kod zostanie skompilowany grzywny:

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

Dlaczego java enum jest zaprojektowany w ten sposób?

+0

Przede wszystkim "wyliczenie" ma na celu * wyliczenie * więcej niż zero elementów. Ten wzór jest całkowicie poprawny. –

+0

Ponieważ obowiązkowe jest posiadanie co najmniej jednej stałej wyliczeniowej. Ponieważ w ten sposób składnia jest zdefiniowana w specyfikacji języka Java. Bo. – EJP

+0

@EJP Ale w późniejszym przypadku nie zadeklarowałem żadnej stałej wyliczeniowej, ale po prostu dodałem średnik przed zadeklarowaniem zmiennej. Czy nie jest sprzeczne z mandatem, że "Enum" powinien mieć co najmniej jedną stałą enum? –

Odpowiedz

10

Numer ; wskazuje koniec listy identyfikatorów. Wygląda na to, że możesz mieć pustą listę enum, ale musisz mieć jedną.

Zobacz 8.9.1 z Java Language Specification:

8.9.1 Enum Stałe
korpusie typu enum może zawierać wyliczenia stałych

+4

W szczególności: 'EnumBodyDeclarations: ; ClassBodyDeclarationsopt' – assylias

+0

Thnx za szybką odpowiedź i odpowiedni link do JLS. Tak, przeszedłem przez ten link. Ale nie mogłem znaleźć powodu dla takiego ograniczenia desgin dla wyliczeń w java. W końcu należy przyjąć, że jest to tylko sposób, w jaki java wybrała zaprojektowanie wyliczenia? Nie ma innych powodów, takich jak: sposób traktowania wyłudzeń przez JVM pod względem ładowania, inicjowania lub jakiegokolwiek innego ... –

2

Dwa obowiązkowe elementy wyliczenia to:

  1. identyfikatory enum;
  2. enum body.

Musisz najpierw zadeklarować Identyfikatory enum listy przed ciałem enum. Tutaj, ; pokazuje pierwszą część, ponieważ pierwsza część jest obowiązkowa. Jeśli to zignorujesz, spowoduje to błąd kompilacji. Jeśli dodasz ;, to skompiluje się, gdy będziesz spełniać oba kryteria.

Powiązane problemy