2012-03-15 9 views
7

Devo scegliere tra diversi generi di libri e stavo pensando di usare enumer per questo, ma ci sono diversi generi composti da due o più parole come "Medical, Health & Fitness", "Art & Fotografia", "Science Fiction", eccÈ possibile avere una classe enum con enumerazione di due o più parole?

public enum Genero { 
    Action, Comedy, Drama, Computers, Novel, Science Fiction 
} 

ma ho ottenuto un errore di sintassi per "Science Fiction". Ho provato a metterlo con virgolette doppie e semplici quout, ma nessuno dei due ha funzionato. Questa enumerazione verrà utilizzata come attributo per la classe del libro.

risposta

14

No, non è possibile. I nomi Enum devono essere valid Java identifiers - ciò significa che non ci sono spazi. La convenzione è dichiarare nomi enum in tutti i caratteri maiuscoli e parole separati utilizzando una sottolineatura, così:

public enum Genero { 
    ACTION, COMEDY, DRAMA, COMPUTERS, NOVEL, SCIENCE_FICTION 
} 
+0

Dato che le emum sono gestite internamente, penso che userò semplicemente un trattino basso –

+0

Va bene così! –

5

non è possibile. È possibile, tuttavia, utilizzare un trattino basso (Science_Fiction) nel nome. È inoltre possibile eseguire l'override del metodo toString di restituire tutto quello che vuoi che (poiché è emerso che si sta andando per un nome leggibile per le enumerazioni):

public enum Genero { 
    ACTION("Action"), COMEDY("Comedy"), DRAMA("Drama"), COMPUTERS("Computers"), NOVEL("Novel"), SCIENCE_FICTION("Science Fiction"); 

    private final String toString; 

    private Genero(String toString) { 
     this.toString = toString; 
    } 

    public String toString(){ 
     return toString; 
    } 
} 
+0

Che non sta per essere compilato. –

+0

@ TomHawtin-tackline Whoopsies, ora riparato. – Jeffrey

+0

Voglio solo assegnare al genere dell'attributo Sesso un genere. Tipo: 'Gender = Genero.ACTION' Non vedo dove potrei usare il costruttore o il metodo toString: S –

0

questo potrebbe essere quello che vuoi:

static private enum EnumExample { 
    R("Sample emun with spaces"), 
    G("Science Fiction"); 
    final private String value; 
    EnumExample(String s) { 
    value = s; 
    } 
} 

System.out.println(EnumExample.G.value); 
System.out.println(EnumExample.valueOf("G").value); 

Science Fiction 
Science Fiction 
+0

Farei quel campo 'final' e' private'. –

+0

@ TomHawtin-tackline Intendi "valore stringa privata finale" o? – Java42

+0

Sì. Attualmente puoi scrivere 'EnumExample.G.value =" Comedy ";'. –

Problemi correlati