[英]Java - Can you access an Enum declared in Subclass from Super class?
我希望在子类中以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());
}
}
}
values()
是静态方法,不能在实例上调用它。 要从类中获取枚举值,请使用Class.getEnumConstants()
:
Class<? extends Enum> enumClass = getEnumClass();
for (Object o: enumClass.getEnumConstants())
System.out.println(o);
实际上,您可以在实例上调用静态方法,但是无法以这种方式获取Enum的实例。 也就是说,此行将不起作用,并且每次都会引发InstantiationException。
Enum newEnum = enumClass.newInstance();
这是因为Enums的值受到限制,并且这些值是在初始化类时由JVM设置的(在您的示例中为Pets.CAT和Pets.DOG)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.