Java 枚举:列出 Class

发布于 2024-08-08 22:07:43 字数 135 浏览 3 评论 0 原文

我已经获得了枚举的类对象(我有一个 Class),并且我需要获取此枚举表示的枚举值的列表。 values 静态函数具有我需要的功能,但我不确定如何从类对象访问它。

I've got the class object for an enum (I have a Class<? extends Enum>) and I need to get a list of the enumerated values represented by this enum. The values static function has what I need, but I'm not sure how to get access to it from the class object.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

許願樹丅啲祈禱 2024-08-15 22:07:43

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

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

如果您不知道,您可以通过以下方式获取它们的数组(正如汤姆首先所做的那样):

     klass.getEnumConstants();

If you know the name of the value you need:

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

If you don't, you can get an array of them by (as Tom got to first):

     klass.getEnumConstants();
夏了南城 2024-08-15 22:07:43

我很惊讶地看到 EnumSet#allOf() 没有提到:

public static >;枚举集 allOf(Class elementType)

创建一个包含指定元素类型中的所有元素的枚举集。

考虑以下enum

enum MyEnum {
  TEST1, TEST2
}

只需像这样调用该方法:

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

当然,这返回一个Set,而不是List,但这应该足够了在许多(大多数?)用例中。

或者,如果您有一个未知的枚举

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

Class#getEnumConstants() 的特点是,它的类型是这样的,因此不可能传递除 < 之外的任何内容。 code>enum 到它。例如,下面的代码是有效的并返回 null

String.class.getEnumConstants();

虽然这不会编译:

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

I am suprised to see that EnumSet#allOf() is not mentioned:

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

Creates an enum set containing all of the elements in the specified element type.

Consider the following enum:

enum MyEnum {
  TEST1, TEST2
}

Simply call the method like this:

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

Of course, this returns a Set, not a List, but it should be enough in many (most?) use cases.

Or, if you have an unknown enum:

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

The advantage of this method, compared to Class#getEnumConstants(), is that it is typed so that it is not possible to pass anything other than an enum to it. For example, the below code is valid and returns null:

String.class.getEnumConstants();

While this won't compile:

EnumSet.allOf(String.class); // won't compile
梦醒灬来后我 2024-08-15 22:07:43

使用反射就像调用Class#getEnumConstants()

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

using reflection is simple as calling Class#getEnumConstants():

List<Enum<?>> enum2list(Class<? extends Enum<?>> cls) {
   return Arrays.asList(cls.getEnumConstants());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文