2013-06-27 14 views
8

Se io dichiarare una variabile prima o senza dichiarare le costanti enum in questo modo:Perché le costanti enum devono essere dichiarate prima di qualsiasi altra variabile e dichiarazione dei metodi in un tipo enum?

enum MyEnum 
{ 
    int i = 90; 
} 

mostra seguente errore di compilazione.

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 

Ma se io dichiaro una costante enum prima di dichiarare i allora compila bene.
Anche il seguente codice compilerà bene:

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

Perché java enum è stato progettato in questo modo?

+0

In primo luogo, 'enum' è progettato per essere * un'enumerazione * di più di zero elementi. Questo design è perfettamente valido. –

+0

Perché è obbligatorio avere almeno una costante enum. Perché è così che la sintassi viene definita nella specifica del linguaggio Java. Perché. – EJP

+0

@EJP Ma in seguito non ho dichiarato alcuna costante enum ma ho semplicemente aggiunto un punto e virgola prima di dichiarare una variabile. Non sta andando contro il mandato che un Enum dovrebbe avere almeno un enum costante? –

risposta

10

Il ; indica la fine dell'elenco degli identificatori di enum. Apparentemente puoi avere una lista vuota di enum, ma devi averne una.

Vedi 8.9.1 del Java Language Specification:

8.9.1 Enum Costanti
Il corpo di un tipo enum può contenere enum costanti

+4

In particolare: 'EnumBodyDeclarations: ; ClassBodyDeclarationsopt' – assylias

+0

Thnx per la risposta rapida e il relativo collegamento a JLS. Sì, ho passato questo link. Ma non riuscivo a trovare una ragione per un simile vincolo per le enumerazioni in java. Quindi, alla fine, si deve presumere che sia solo il modo in cui java ha scelto di progettare le enumerazioni? Non ci sono altri motivi come: il modo in cui le enumerazioni vengono trattate da JVM in termini di caricamento, inizializzazione o qualsiasi altro ... –

2

Due parti obbligatorie del enum è:

  1. identificatori di enumerazione;
  2. enum body.

si deve dichiarare prima identificatori enum elenco prima che il corpo enum. Qui, ; mostra la prima parte, poiché la prima parte è obbligatoria. Se lo ignori, produrrà un errore di compilazione. Se si aggiunge ;, esso verrà compilato non appena il numero di telefono soddisfa entrambi i criteri.

Problemi correlati