我根本不是Java专家,所以如果我做的事非常愚蠢,我会道歉。我正在尝试使用此
获取我的泛型参数的类型public class TestClass<T> {
public T testMethod() {
Type type = getClass().getGenericSuperclass();
ParameterizedType paramType = (ParameterizedType) type;
Class<T> aClass = (Class<T>) paramType.getActualTypeArguments()[0];
}
}
我收到此运行时错误
java.lang.Class无法强制转换为java.lang.reflect.ParameterizedType
怎么了?
答案 0 :(得分:1)
getGenericSuperclass
method,顾名思义,返回一个代表类的超类的Type
,而不是类本身。
此处,type
是Class
的{{1}}对象,而不是Object
。
要获取自己班级的类型参数,请使用the getTypeParameters
method。
答案 1 :(得分:1)
您误解了getGenericSuperclass()
方法的作用。它是关于超类的泛型类型,而不是类本身。
以下是其用法示例。
public class TestClass<T> {
// The generic type of the super class of SubClass is TestClass<String>
public static class SubClass extends TestClass<String> {
public void testMethod() {
Type type = getClass().getGenericSuperclass();
System.out.println(type);
};
}
public static void main(String[] args) {
new SubClass().testMethod();
}
}
此程序打印:
TestClass<java.lang.String>
由于类型擦除,您似乎要尝试做的事情(在运行时获取实例的通用类型)在Java中实际上是不可能的。