私は列挙型(私は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. 選択された列挙値
- 8. Javaエラー:クラス、インタフェース、または列挙型が予想される(マルチレベルパッケージ)
- 9. クラス<? extends X>からX
- 10. <o:importConstants>によってインポートされた列挙値を反復する
- 11. Javaの「クラス、インタフェース、または列挙型が予期される」エラー
- 12. Javaエラー:クラス、インターフェイス、または列挙型が予想されます。
- 13. Java:列挙型と値クラスの違いは何ですか?
- 14. Java:関連する2つのジェネリックでマップを宣言するタイプ(<T>マップ<Class <?extends ClassA <T>>、クラス<?extends ClassB >>
- 15. Java:セットからの列挙<String>
- 16. クラスから列挙値を取得
- 17. リスト<? extends MyType>
- 18. Java MyBatis列挙型文字列値
- 19. Javaで配列定数で定義された列挙型
- 20. 値を列挙型に設定 - Java
- 21. 一般的なJAXBElementからJavaクラスを検出する方法<? extends >
- 22. Javaでのリフレクションを使用した列挙型クラスの検索
- 23. valueOfで返されない列挙値
- 24. Javaの列挙は、私はこのような列挙型クラスを持つインデックス
- 25. クラスのスコープ外に宣言された列挙型
- 26. FileReaderのクラス、インターフェイス、または列挙型が予想される
- 27. は私が列挙抽象クラスを持つ列挙クラスの型
- 28. C#Generics:リスト<Object>または新しいクラスextendsリスト<Object>
- 29. (Beginner Java)クラス、インターフェイス、または列挙型が必要です
- 30. Java Generics WildCard:<? Number>対<T extends Number>
'Class'はリフレクションオブジェクトです(パッケージに先行します)。 –