私は列挙型(私はClass<? extends Enum>
を持っています)のクラスオブジェクトを持っており、この列挙体が表す列挙値のリストを取得する必要があります。 values
静的関数には必要なものがありますが、クラスオブジェクトからアクセスする方法がわかりません。 反射を使用してJava Enums:列挙された値をクラス<? extends Enum>
49
A
答えて
90
10
はClass#getEnumConstants()を呼び出すように簡単です:
List<Enum> enum2list(Class<? extends Enum> cls) {
return Arrays.asList(cls.getEnumConstants());
}
16
あなたが必要とする値の名前を知っている場合:あなたがいない場合は
Class<? extends Enum> klass = ...
Enum<?> x = Enum.valueOf(klass, "NAME");
を、あなたはそれらの配列を得ることができます(Tomが最初に得たように):
klass.getEnumConstants();
3
私はEnumSet#allOf()
が記載されていないことを確認するために驚いています:
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
は、指定された要素型のすべての要素を含むenumセットを作成します。
には、以下のenum
を考えてみましょう:
enum MyEnum {
TEST1, TEST2
}
は、単にこのようにメソッドを呼び出します。もちろん
Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class);
、これは、Set
を返していないList
、それはで十分なはず多くの(ほとんどの?)ユースケース。
あるいは、あなたが未知のenum
を持っている場合:Class#getEnumConstants()
に比べ
Class<? extends Enum> enumClass = MyEnum.class;
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass);
この方法の利点は、それにenum
以外のものを渡すことはできませんように、それが入力されていることです。例えば、以下のコードは有効であり、null
を返す:
String.class.getEnumConstants();
これはコンパイルされません中:
関連する問題
- 1. Java Generics - クラスまたはクラス<? extends SomeClass>
- 2. ジェネリックとクラス<?列挙型<?>>、class.getEnumConstants対EnumSet.allOf(クラス)()拡張
- 3. Javaの列挙型クラス
- 4. クラス<? extends T>用法
- 5. <? extends > Java構文
- 6. クラスから列挙値を取得
- 7. Java:セットからの列挙<String>
- 8. Java:関連する2つのジェネリックでマップを宣言するタイプ(<T>マップ<Class <?extends ClassA <T>>、クラス<?extends ClassB >>
- 9. Javaで配列定数で定義された列挙型
- 10. リスト<? extends MyType>
- 11. 値を列挙型に設定 - Java
- 12. Javaでのリフレクションを使用した列挙型クラスの検索
- 13. 一般的なJAXBElementからJavaクラスを検出する方法<? extends >
- 14. クラスのスコープ外に宣言された列挙型
- 15. FileReaderのクラス、インターフェイス、または列挙型が予想される
- 16. 抽象クラスと列挙体
- 17. C#Generics:リスト<Object>または新しいクラスextendsリスト<Object>
- 18. のtypedefと列挙型または列挙型クラス
- 19. (Beginner Java)クラス、インターフェイス、または列挙型が必要です
- 20. Java Generics WildCard:<? Number>対<T extends Number>
- 21. JAXB生成されたXSDの列挙型の値の文字列
- 22. jaxb hide列挙値
- 23. Java:列挙型または数値によるエンコーディング?
- 24. 「?」のクラスタイプを取得します。 ArrayList <? extendsクラス>
- 25. Vimで列挙されたリスト
- 26. 列挙型<?拡張インターフェース>
- 27. "extends"を持つJavaジェネリックス
- 28. ジェネリック<T extends A>クラスはTの1つの
- 29. Doctrine列挙型で列挙されていない値を追加することはできませんか?
- 30. JavaプロファイリングPermgen:javaクラス内で列挙型をアンロードする方法
'Class'はリフレクションオブジェクトです(パッケージに先行します)。 –