2010-01-30 58 views
0

我希望在Enum類型中聲明一個子類,然後從超類中訪問它。這是我想出了,但它不工作:Java - 你能訪問一個在超類的子類中聲明的Enum嗎?

class Subclass { 
enum Pets { 
    CAT, 
    DOG; 
} 

Class<Pets> getEnumClass() { 
    return Pets.class; 
} 
} 

class Superclass { 
    // This generates a warning: 
abstract Class<? extends Enum> getEnumClass(); 
void PrintEnumNames() throws InstantiationException, IllegalAccessException { 
Class<? extends Enum> enumClass = getEnumClass(); 

Enum newEnum = enumClass.newInstance(); 
for(Enum iEnum : newEnum.values()) { // newEnum.values() isn't available 
    System.out.printf("%s", iEnum.toString()); 
    } 
} 
} 

回答

2

values()是一個靜態方法,你不能把它的實例。從類獲得枚舉值,使用Class.getEnumConstants()

Class<? extends Enum> enumClass = getEnumClass(); 
for (Object o: enumClass.getEnumConstants()) 
    System.out.println(o); 
2

其實,你可以調用實例的靜態方法,但是它是不可能得到一個枚舉的實例這種方式。也就是說,這條線不起作用,並且每次都會拋出一個InstantiationException。

Enum newEnum = enumClass.newInstance(); 

這是因爲枚舉,它們的值可以是被限制,而這些值由JVM設置上課的時候被初始化(Pets.CAT和Pets.DOG,在你的例子)。

相關問題