Java 为什么不检测我的参数化类类型?
我根本不是Java专家,所以如果我做了一些非常愚蠢的事情,我道歉。我正在尝试使用以下命令获取泛型参数的类型Java 为什么不检测我的参数化类类型?,java,generics,Java,Generics,我根本不是Java专家,所以如果我做了一些非常愚蠢的事情,我道歉。我正在尝试使用以下命令获取泛型参数的类型 public class TestClass<T> { public T testMethod() { Type type = getClass().getGenericSuperclass(); ParameterizedType paramType = (ParameterizedType) type; Class&l
public class TestClass<T> {
public T testMethod() {
Type type = getClass().getGenericSuperclass();
ParameterizedType paramType = (ParameterizedType) type;
Class<T> aClass = (Class<T>) paramType.getActualTypeArguments()[0];
}
}
公共类TestClass{
公共测试方法(){
类型Type=getClass().getGenericSuperclass();
ParameteredType paramType=(ParameteredType)类型;
类aClass=(类)paramType.getActualTypeArguments()[0];
}
}
我得到这个运行时错误
无法将java.lang.Class转换为java.lang.reflect.ParameterizedType
怎么了?顾名思义,返回一个类型
,它表示类的超类,而不是类本身
这里,type
是object
的Class
对象,而不是TestClass
要获取您自己的类的类型参数,请使用。您误解了方法
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{
//子类的超类的泛型类型是TestClass
公共静态类子类扩展了TestClass{
公共void testMethod(){
类型Type=getClass().getGenericSuperclass();
系统输出打印项次(类型);
};
}
公共静态void main(字符串[]args){
新的子类().testMethod();
}
}
此程序打印:
TestClass<java.lang.String>
TestClass
在Java中,由于类型擦除,您试图做的事情(在运行时获取实例的泛型类型)实际上是不可能的。显然误解了该方法的使用,这确实很愚蠢。谢谢