2016-06-01 2 views
0

私はJavaを使い慣れていないので、このような質問に答えが見つからないようです。Javaで列挙型のインスタンスを作成する必要があるのはなぜですか?

私はCの背景から来て、ちょうどそう...

enum Security_Levels 
     { 
      black_ops, 
      top_secret, 
      secret, 
      non_secret 
     }; 

だから私はblack_opsを使用することができ、私は0になるだろうのような列挙型の名前を呼び出すことにより、列挙型を作成し、それらを使用して使用します。

Javaでは、別のフォルダに列挙型を定義し、それを使用する場所にインポートすることができます。しかし、Cとは異なり、私はenumオブジェクトを簡単に呼び出すことはできません。私はそれが動作しないプレビューを呼び出そうとすると

public enum GroupID 
{ 
    camera, 
    projector, 
    preview, 
    slr, 
    led 
} 

...私はインスタンスを作っても、

GroupID egroupid_preview = GroupID.preview; 

次に列挙オブジェクトのインスタンスを作成する必要があり、私が作成する必要があります以下のように値にアクセスするpublic関数。

public enum GroupID 
{ 
    camera(1), 
    projector(2), 
    preview(3), 
    slr(4), 
    led(5); 

    private int val; 

    private GroupID(int val) { 
     this.val = val; 
    } 
    int getVal() { 
     return val; 
    } 
} 

これはすべて間違っているのですか、それともJavaが列挙型にアクセスするのが難しいのですか?

+3

を「私が作成する必要があり、これらは一般的名称で使用されていますenumオブジェクトのインスタンス " - インスタンスを作成していません。 「値にアクセスするためのパブリック関数を作成する必要があります」 - つまり、 'enum'には「値」を指定する必要はなく、その値は' int'である必要はありません。 – CommonsWare

+1

http://stackoverflow.com/questions/8157755/how-to-convert-enum-value-to-int http://stackoverflow.com/questions/3990319/storing-integer-values-as-constants-in -enum-manner-in-java –

+2

あなたはint型の列挙型を考えていますが、それは実際にJavaでのものではありません。 Enums _are_ objects。 –

答えて

2

Javaの列挙子は特別な静的オブジェクトであり、デフォルトでは値を保持しません。あなたがあなた自身を作った機能を持つものを使用するか、このような何かを行うことができますあなたの列挙の実際の値が必要な場合

enum Foo 
{ 
    foo, 
    bar, 
    oof; 
} 

public void func(Foo arg) 
{ 
    if(arg == Foo.bar) 
     // do bar code 

    switch(arg) 
    { 
     case foo: // do foo code 
     case oof: // do oof code 
    } 
} 

enum Foo 
{ 
    foo (1), 
    bar (2), 
    oof (3); 

    public final int val; 

    Foo(int val) 
    { 
     this.val = val; 
    } 
} 

public static void main(String[] args) 
{ 
    Foo f = Foo.bar; 

    int val = f.val; 
} 
+0

ありがとうございます。これは私のために空気をきれいにする。 – Sam

+0

enumのname()関数が役に立ちました。 –

関連する問題