你可以将
enumType
定义为
Class<? extends Enum<?>>
类型:
enum EFormSw {
OBJ_KEY_LIST("Object Keys", EObjKeyType.class),
OBJ_NOTE_LIST("Object Notes", EObjNoteType.class);
private final String label;
private final Class<? extends Enum<?>> enumType;
EFormSw(String label, Class<? extends Enum<?>> enumType) {
this.label = label;
this.enumType = enumType;
}
public String getLabel() {
return label;
}
public Class<? extends Enum<?>> getEnumType() {
return enumType;
}
}
当您循环遍历
EFormSw
的值时,您可以使用
getEnumConstants
获取表示枚举类型的枚举值的
Enum<?>[]
,但是您无法做太多事情,因为您不知道确切的枚举类型是什么。
for (EFormSw constant: EFormSw.values()) {
Enum<?>[] values = constant.getEnumType().getEnumConstants();
}
你仍然可以在数组元素上调用java.lang.Enum
和java.lang.Object
中声明的大多数方法,所以如果你只需要这些方法,那么你可以直接使用它们。
如果你想要使用EObjKeyType
和EObjNoteType
之间共享的一些常见功能,你可以将所有共同的功能提取到一个公共接口中,它们都实现该接口:
interface EObjType {
}
enum EObjKeyType implements EObjType {
}
enum EObjNoteType implements EObjType {
}
然后将enumType
更改为:
private final Class<? extends EObjType > enumType;
现在您可以获得一个
EObjType[]
。
EFormSw.OBJ_KEY_LIST.enumType.values()
这样的东西?我不明白你怎么能直接从EFormSw
访问到enumType
。你必须使用OBJ_KEY_LIST
或OBJ_NOTE_LIST
。 - SweeperOBJ_KEY_LIST
,为什么不能直接执行EObjKeyType.values()
呢?如果你不知道它是哪个常量,那么你只会得到一个由Enum<?>
组成的数组,因为每个常量都有不同类型的enumType
,而你并不知道它是哪一个。这对你实际上有用吗? - Sweeper