2012-03-15 23 views
7

私は本のためのいくつかのジャンルのジャンルから選択する必要があり、私はこれにenumsを使用して考えていましたが、 "医療、健康&フィットネス"、 "アート&写真"、 "科学フィクション "など2つ以上の単語の列挙型を持つenumクラスを持つことは可能ですか?

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

しかし、" Science Fiction "の構文エラーが発生しました。私は二重引用符と単純なquoutesを入れてみましたが、どちらもうまくいきませんでした。この列挙型はBookクラスの属性として使用されます。

答えて

14

いいえ、不可能です。列挙型名はvalid Java identifiersでなければなりません。つまり、空白はありません。通常の慣例では、このように、アンダースコアを使用して、すべて大文字と別の言葉で列挙名を宣言することです:

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

emumは内部的に処理されるので、ちょうどアンダースコアを使用すると思います –

+0

これは大丈夫です! –

5

ことができません。ただし、名前にアンダースコア(Science_Fiction)を使用することは可能です。 (それはあなたがあなたの列挙型のための人間可読な名前のために行くされて表示されますので)またにあなたがそれを好き返すようにtoStringメソッドをオーバーライドすることができます。

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

これはコンパイルされません。 –

+0

@ TomHawtin-tackline Whoopsies、今修正されました。 – Jeffrey

+0

私は、Gender属性のブックに1つの性別を割り当てたいだけです。次のようにします: 'Gender = Genero.ACTION'コンストラクタまたはtoStringメソッドをどこで使うことができないのでしょうか?S –

0

これはあなたが望むものであるかもしれない:

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

私はそのフィールドを 'final'と' private'にします。 –

+0

@ TomHawtin-tackline "final private String value"または? – Java42

+0

はい。現在、 'EnumExample.G.value =" Comedy ";'と書くことができます。 –

関連する問題