Java中如何判断对象类与枚举值类相等及枚举列表元素类型
嘿,这两个问题都是Java枚举使用里的常见场景,我来给你拆解下:
问题1:检查对象的类是否与枚举值的类相等
首先,枚举的所有实例本质上都是所属枚举类的单例对象,它们的类就是对应的枚举类本身。要判断某个对象的类和枚举值的类是否相等,你可以这么做:
- 直接通过
getClass()方法对比:// 假设你的枚举是MyEnum,obj是待检查的对象 boolean isSameClass = obj.getClass() == MyEnum.LOADING.getClass(); - 或者更直接地对比枚举类本身(因为枚举实例的类就是枚举类):
boolean isSameClass = obj.getClass() == MyEnum.class;
如果不确定obj是不是枚举实例,还可以先加一层instanceof判断,避免空指针或者类型转换异常:
if (obj instanceof MyEnum) { boolean isSameClass = obj.getClass() == MyEnum.class; }
问题2:判断List中的枚举元素是否为指定枚举常量
你提到没法直接用instanceof,这很正常——因为LOADING、HEADER、IMAGE都是RecyclerViewItems枚举的实例,不管你取List里哪个元素,item instanceof RecyclerViewItems都会返回true,根本区分不了具体是哪个枚举常量。
正确的做法是直接对比枚举实例本身,因为Java枚举是单例实现的,每个枚举常量在JVM里只有一个实例,用==或者equals()都可以(==更高效):
// 假设你的List是List<RecyclerViewItems> itemList int i = ...; // 指定的位置 RecyclerViewItems currentItem = itemList.get(i); // 判断是否是LOADING或HEADER if (currentItem == RecyclerViewItems.LOADING || currentItem == RecyclerViewItems.HEADER) { // 执行你的业务逻辑 }
如果你更习惯用equals()(虽然对于枚举来说没必要,但语法上也是对的),可以这么写:
if (RecyclerViewItems.LOADING.equals(currentItem) || RecyclerViewItems.HEADER.equals(currentItem)) { // 执行逻辑 }
这里推荐用==,因为枚举实例是单例,不会有相等但不是同一个对象的情况,而且==不需要调用方法,性能更优。
内容的提问来源于stack exchange,提问作者bycfly
相关产品推荐
相关产品推荐

