在使用枚举类的时候,建议用getDeclaringClass
返回枚举类。但是为什么不用getClass
呢?
public enum FruitEnum{
BANANA,APPLE;
public static void main(String[] args) {
System.out.println(BANANA.getDeclaringClass());
System.out.println(BANANA.getClass());
}
}
# 运行结果
class FruitEnum
class FruitEnum
}
有人说结果不是一样吗?不急,看下面这种情况。
public enum FruitEnum{
BANANA{
String getName() {
return "香蕉";
}
},APPLE{
String getName() {
return "苹果";
}
};
abstract String getName();
public static void main(String[] args) {
System.out.println(BANANA.getDeclaringClass());
System.out.println(BANANA.getClass());
}
}
# 运行结果
class FruitEnum
class FruitEnum$1
这种情况下就不同了。因为此时BANANA
和APPLE
相当于FruitEnum
的内部类。下面来看看Enum
的源码:
public final Class<E> getDeclaringClass() {
Class var1 = this.getClass();
Class var2 = var1.getSuperclass(); // 获取上一级的父类
return var2 == Enum.class?var1:var2;
}
当上一级的父类不是Enum
,则返回上一级的class
。因此对枚举类进行比较的时候,使用getDeclaringClass
是万无一失的。