2010-12-01 9 views
23

Correspondig次の質問:のJava:メソッドのパラメータでは、一般的な列挙

Java: Enum parameter in method

私はどのように私は一般的に列挙型を必要とするコードをフォーマットすることができ、知っていただきたいと思います。

public class Bar { 
    public Bar(generic enum); 
} 

後、私は "foo" というような、より列挙型クラスがあるでしょうが、あなたはまだ列挙クラスのいずれかの種類を含むバーを作成することができます上Foo.java

public enum Foo { 
    a(1), b(2); 
} 

Bar.java 。私は途中で "jdk1.6.0_20"を持っています...

答えて

32

参照のためにEnumSetの方法を参照してください。

public static <E extends Enum<E>> EnumSet<E> of(E e) 

(このメソッドは、指定された列挙型要素eから一つの要素でEnumSetのを返す)

だから、あなたが必要とする一般的な範囲は以下のとおりです。<E extends Enum<E>>


実は、あなたはおそらくBarを行います自体:

public class Bar<E extends Enum<E>> { 

    private final E item; 

    public E getItem(){ 
     return item; 
    } 

    public Bar(final E item){ 
     this.item = item; 
    } 
} 

// e.g. this simple version 
Bar<MyEnum> bar = Bar.with(MyEnum.SOME_INSTANCE); 
// instead of the more verbose version: 
Bar<MyEnum> bar = new Bar<MyEnum>(MyEnum.SOME_INSTANCE); 

参考:

+0

は、その一例をありがとう - 私は「プレースホルダはPLACEHOLDERの列挙型を拡張する」(対ちょうど「プレースホルダはスーパータイプを拡張して読んでいました"非enumの場合) – Roboprog

6
public class bar { 
    public <E extends Enum<E>> void bar(E enumObject); 
} 

bar方法について列挙型のいずれかの種類を受け取ることができます。

13

また、このようにそれを行うことができます。

public class Bar { 
    public Bar(Enum<?> e){} 
} 

すべての列挙が列挙型を拡張します。あなたがenum定数を必要とするなら、あなたはこれを使用することができます:構文として無意味であるよう

e.getDeclaringClass().getEnumConstants() 
関連する問題