好的,我有两个枚举:
public enum AnotherEnum
{
value1, value2, value3;
}
public enum MyEnum implements MyInterface
{
value1(AnotherEnum);
generic_reference_type a;
MyEnum ( ?? )
{
a = ??
}
GetGenericReference()
{
return this.a;
}
}
我希望MyEnum
存储对AnotherEnum
类的引用,以便我能够执行此操作:
MyEnum.value1.GetGenericReference().values();
这可能吗?
答案 0 :(得分:1)
如果您不了解该课程,您将获得带有反射的通用枚举值
Object someEnum = ...
// get all the values for the same Enum type.
Object[] enums = someEnum.getClass().getEnumConstants()
答案 1 :(得分:1)
如果我正确地阅读你的问题。你想将不同的泛型类型传递给枚举的每个实例......你不能这样做,因为枚举的每个实例都来自相同的 class,可以是通用的,但如果泛型必须具有相同的泛型参数。
但是,您可以将代码置于枚举类的基础上,以表达为Class<? extends Enum<?>>
来表达您的意图:
public enum AnotherEnum {
A, B, C;
}
public enum YetAnotherEnum {
X, Y, Z;
}
public interface MyInterface {
public Enum<?>[] getGenericReferenceValues();
}
public enum MyEnum implements MyInterface {
value1(AnotherEnum.class),
value2(YetAnotherEnum.class);
final Class<? extends Enum<?>> a;
private MyEnum(Class<? extends Enum<?>> a) {
this.a = a;
}
public Enum<?>[] getGenericReferenceValues() {
return a.getEnumConstants();
}
}
看到它有效:
public static void main(String[] args) {
System.out.println(Arrays.toString(MyEnum.value1.getGenericReferenceValues()));
System.out.println(Arrays.toString(MyEnum.value2.getGenericReferenceValues()));
}
输出:
[A, B, C]
[X, Y, Z]