Java 使用class.isEnum()或instanceof Enum更好吗?

Java 使用class.isEnum()或instanceof Enum更好吗?,java,enums,Java,Enums,我有一个目标。我想检查它是否为enum类型。有两种方法可以做到这一点 object.getClass().isEnum() 或 一个更好吗?在我看来,Enum的对象实例之所以更好,有几个原因: 这里的问题很明显:“这是一个枚举吗?” 它不存在NullPointerException的风险(如果对象为null,它将只计算为false) 它比较短 我认为使用isEnum()的唯一原因是,我只能访问类对象,而不能访问具体实例。所说的“更好”,是指“更容易阅读”、“运行更快”等吗?@templat

我有一个目标。我想检查它是否为enum类型。有两种方法可以做到这一点

object.getClass().isEnum()


一个更好吗?

在我看来,Enum的对象实例之所以更好,有几个原因:

  • 这里的问题很明显:“这是一个枚举吗?”
  • 它不存在
    NullPointerException
    的风险(如果
    对象
    null
    ,它将只计算为
    false
  • 它比较短

我认为使用
isEnum()
的唯一原因是,我只能访问
对象,而不能访问具体实例。

所说的“更好”,是指“更容易阅读”、“运行更快”等吗?@templatetypedef主要是性能,然后更容易阅读。如果需要确定对象是否是枚举,那么你应该问的问题是“我为什么要使用这种糟糕的设计”。@DwB在你发表评论之前,我认为你不能假设我在做什么?我正在创建一个格式化程序,它需要知道要格式化的对象的类型。如果有更好的格式化(对象)的方法,那么我洗耳恭听。如果您要使用
isEnum()
您应该注意,当涉及枚举时,建议使用
getDeclaringClass()
而不是
getClass()
,尤其是当您想测试它是否是枚举时。有关NPE,请参见+1。我现在在循环中这样做,不确定这是否会影响性能,
instanceof
的工作速度也更快(这取决于所测试的类,但对于我所有的测试来说,至少比
isEnum
快33%,最快的大约快450%)。isEnum:2691826实例:658774@ty1824-太棒了。统计数据正是我想要的
object instanceof Enum