繁体   English   中英

Java-您可以从父类访问在子类中声明的枚举吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM