Java 如何使用TypeToken获取类型参数?
我试图在运行时使用Java 如何使用TypeToken获取类型参数?,java,generics,guava,Java,Generics,Guava,我试图在运行时使用TypeToken查找类型参数,如示例IKnowMyType所示: public class Test<E extends Enum<E>> { private static enum MyEnum { FIRST, SECOND }; private final TypeToken<E> enumType = new TypeToken<E>(getClass()) {
TypeToken
查找类型参数,如示例IKnowMyType
所示:
public class Test<E extends Enum<E>> {
private static enum MyEnum {
FIRST,
SECOND
};
private final TypeToken<E> enumType = new TypeToken<E>(getClass()) {
};
public static void main(String[] args) {
Test<MyEnum> container = new Test<>();
System.out.println(container.enumType.getRawType());
}
}
公共类测试{
私有静态枚举MyEnum{
第一,
第二
};
私有最终TypeToken枚举类型=新的TypeToken(getClass()){
};
公共静态void main(字符串[]args){
测试容器=新测试();
System.out.println(container.enumType.getRawType());
}
}
当我运行这段代码时,我得到类java.lang.Enum
作为输出。为什么我不改为使用MyEnum类?这个“黑客”对运行时类型的值测试不起作用
Java无法传播在这里实例化Test
类时推断的类型参数
Test<MyEnum> container = new Test<>();
现在,由于类维护有关其泛型超类的信息,因此上面的TypeToken
实例化中的getClass
调用提供了足够的上下文,可以将E
解释为MyEnum
,我不理解。您的答案中的Sample
指的是什么?你是说我必须创建一个子类Sample extends Test
,然后才能查找Sample.enumType
?@Gili抱歉,我使用的是我自己的测试类<代码>示例
是您的测试
。您创建了一个Test
的匿名子类,是的。@SotiriosDelimanolis您能解释一下{}
到底做了什么吗。你能不能再举一个例子,说明在哪里使用了{}
。@KevinWallis这是匿名类的语法。官方教程。@Kevinwall提供了有关类型标记如何工作的更多信息。
private final TypeToken<E> enumType = new TypeToken<E>(getClass()) {
};
Test<MyEnum> container = new Test<MyEnum>() {
};