簡體   English   中英

Java枚舉:列出類<?的枚舉值擴展Enum>

[英]Java Enums: List enumerated values from a Class<? extends Enum>

我有一個枚舉的類對象(我有一個Class<? extends Enum> ),我需要得到這個枚舉所代表的枚舉值的列表。 靜態函數values具有我需要的功能,但我不確定如何從類對象訪問它。

如果您知道所需值的名稱:

     Class<? extends Enum> klass = ... 
     Enum<?> x = Enum.valueOf(klass, "NAME");

如果你不這樣做,你可以得到它們的數組(當湯姆得到第一個):

     klass.getEnumConstants();

使用反射很簡單,因為調用Class#getEnumConstants()

List<Enum<?>> enum2list(Class<? extends Enum<?>> cls) {
   return Arrays.asList(cls.getEnumConstants());
}

我很驚訝看到沒有提到EnumSet#allOf()

public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)

創建一個包含指定元素類型中所有元素的枚舉集。

請考慮以下enum

enum MyEnum {
  TEST1, TEST2
}

只需調用這樣的方法:

Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class);

當然,這會返回一個Set ,而不是List ,但它在許多(大多數?)用例中應該足夠了。

或者,如果你有一個未知的enum

Class<? extends Enum> enumClass = MyEnum.class;
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass);

Class#getEnumConstants()相比,此方法的優點在於它是鍵入的,因此無法將enum以外的任何內容傳遞給它。 例如,以下代碼有效並返回null

String.class.getEnumConstants();

雖然這不會編譯:

EnumSet.allOf(String.class); // won't compile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM