此“ hack”不适用于运行时类型的值
Test。
Java无法在
Test此处实例化类时传播推断的类型参数
Test<MyEnum> container = new Test<>();
到宣言
private final TypeToken<E> enumType = new TypeToken<E>(getClass()) {};因此,
TypeToken不知道
E应该指的是什么。
该的Javadoc状态
构造一个新的类型标记,
T同时 在的上下文中declaringClass解析自由类型变量 。客户端创建一个空的匿名子类。 这样做会将类型参数嵌入匿名类的类型层次结构中,因此尽管删除,我们仍可以在运行时重新构造它。
这就是您需要做的。
Test<MyEnum> container = new Test<MyEnum>() {};现在,由于类维护有关其泛型超类的信息,因此以上实例化中的
getClass调用
TypeToken为
E解释提供了足够的上下文
MyEnum。



