我希望在子类中以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);

09-25 22:30