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