2012-03-15 15 views
7

Mam do wyboru kilka gatunków gatunków do książek i myślałem o tym za pomocą wyliczanek, ale istnieje kilka gatunków składających się z dwóch lub więcej słów, takich jak "Zdrowie, Zdrowie & Fitness", "Art & Fotografia", "Nauka Fiction ", itp.Czy możliwe jest posiadanie klasy enum z wyliczeniem dwóch lub więcej słów?

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

Ale dostałem błąd składniowy dla" Science Fiction ". Próbowałem umieścić go w podwójnych cudzysłowach i prostych quoutach, ale żaden z nich nie działał. To wyliczenie będzie używane jako atrybut klasy Book.

Odpowiedz

14

Nie, to niemożliwe. Nazwy enum muszą być valid Java identifiers - to znaczy bez spacji. Zwykła konwencja jest zadeklarowanie nazwy enum w każdym górnym liter i oddzielnych słów wykorzystaniem podkreślenia, tak:

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

Ponieważ emumy są obsługiwane wewnętrznie, myślę, że wystarczy użyć podkreślenia –

+0

To wszystko w porządku! –

5

To nie jest możliwe. Możliwe jest jednak użycie w nazwie znaku podkreślenia (Science_Fiction). Można również zastąpić metodę toString wrócić co chcesz go (ponieważ wydaje się, idziesz do czytelnej dla człowieka nazwy dla swoich teksty stałe):

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

To się nie skompiluje. –

+0

@ TomHawtin-tackline Whoopsies, naprawiony teraz. – Jeffrey

+0

Po prostu chcę przypisać do atrybutu płci książkę Jednej płci. Na przykład: "Gender = Genero.ACTION" Nie widzę, gdzie można użyć konstruktora lub metody toString: S –

0

To może być to, co chcesz:

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

Zrobiłbym to pole 'final' i' private'. –

+0

@ TomHawtin-tackline Czy masz na myśli "ostateczny prywatny ciąg wartości" lub? – Java42

+0

Tak. Obecnie możesz napisać: "EnumExample.G.value =" Comedy ";'. –

Powiązane problemy