java 列舉類 getClass和getDeclaringClass的區別
阿新 • • 發佈:2019-01-08
在使用列舉類的時候,建議用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
是萬無一失的。