【问题标题】:How to check if java.lang.reflect.Type is an Enum如何检查 java.lang.reflect.Type 是否为枚举
【发布时间】:2012-02-16 23:06:33
【问题描述】:

我想检查 java.lang.reflect.Type 实例是否代表 Emum 对象。

我可以使用 == 比较来检查它是否是特定类的实例,例如:

type == String.class // works

但这似乎不适用于 Enum 类:

type == Enum.class // doesn't work

...这是有道理的,因为实例将是一个特定的枚举,但我想检查该类型是否适用于任何枚举。

请有人向我解释一下如何判断 Type 是否为枚举

【问题讨论】:

  • Class.isEnum() 有什么问题?
  • 我正在使用 Type 对象,因为它支持原始类型。我希望能够调用 isEnum() 但它不在 Type 对象上
  • 无法理解您的评论。类实现类型。

标签: java class reflection types enums


【解决方案1】:
if(type instanceof Class && ((Class<?>)type).isEnum())

【讨论】:

  • 谢谢,我知道这很明显
【解决方案2】:

Class.isEnum() 会为你做这件事。

参考Oracle Doc

【讨论】:

  • 您能否更具体地说明一下如何实现这一点
  • 它将从您的示例转换为 type.isEnum()
  • 我喜欢这个答案,并认为它比上面的答案更容易混淆
【解决方案3】:

为什么不使用 .equals 方法来比较这种类型的比较。 == 主要用于原始类型。

type.equals(Enum.class)

或者您可能需要比较自己的课程。

type.equals(MyClass.class)

【讨论】:

  • 我认为你的第二个建议会起作用,但我需要它与任何枚举一起使用......不仅仅是那些明确定义的
【解决方案4】:
if(type instanceof Class && (Class)type.getClass().isEnum()) {...}

【讨论】:

  • type.getClass() 返回 'class' 而不是我的枚举
  • 啊是的...恐怕@jtahlborn 已经建议了。感谢您的努力
猜你喜欢
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2016-07-08
  • 1970-01-01
  • 2013-03-12
相关资源
最近更新 更多