Java 为什么不检测我的参数化类类型?

Java 为什么不检测我的参数化类类型?,java,generics,Java,Generics,我根本不是Java专家,所以如果我做了一些非常愚蠢的事情,我道歉。我正在尝试使用以下命令获取泛型参数的类型 public class TestClass<T> { public T testMethod() { Type type = getClass().getGenericSuperclass(); ParameterizedType paramType = (ParameterizedType) type; Class&l

我根本不是Java专家,所以如果我做了一些非常愚蠢的事情,我道歉。我正在尝试使用以下命令获取泛型参数的类型

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中,由于类型擦除,您试图做的事情(在运行时获取实例的泛型类型)实际上是不可能的。

显然误解了该方法的使用,这确实很愚蠢。谢谢