2016-12-22 12 views
1

のクラスをEnumSetの変数から取得することは可能ですか?EnumSetのEnumのクラスを取得

次のコードを考えてみましょう:fooBar()Foo.classを書く

enum Foo 
{ 
    FOO_0, 
    FOO_1, 
} 

<E extends Enum<E>> void fooBar(EnumSet<E> enumSet, Class<E> type) 
{ 
    EnumSet<E> none = EnumSet.noneOf(type); 
    // ... 
} 

void bar() 
{ 
    EnumSet<Foo> enumSet = EnumSet.of(Foo.FOO_1); 
    fooBar(enumSet, Foo.class); 
} 

は冗長なようです。私は fooBar()の機能の中からclassを抽出したいと思います。それも可能ですか?

私がしたいことは、fooBar(enumSet);を呼び出すだけで、noneという変数をEnumSet.noneOf()としてインスタンス化できることです。

+0

noneOf()は何をすべきか?最初の議論は何ですか? –

+0

@JBNizet質問には関係ありません。たぶん、このメソッドにもっとランダムな名前を付けるべきだったのでしょうか? – rozina

+2

@rozinaあなたの質問は現在不明なので、問題になります。実際に何をしようとしているかについての詳細情報を追加してください。 –

答えて

2

EnumSetのための作品も、その要素がクラスのボディを持っている場合でも、正しいenumタイプを返します。

public static <T extends Enum<T>> Class<T> getElementType(EnumSet<T> enumSet) { 
    if (enumSet.isEmpty()) 
     enumSet = EnumSet.complementOf(enumSet); 
    return enumSet.iterator().next().getDeclaringClass(); 
} 
+0

これは、空のセットの問題を処理するための狡猾な方法です! –

+0

かなりのランタイムオーバーヘッドに見えますが、動作します。ありがとうございました! – rozina

関連する問題