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

时间:2015-11-05 18:57:09

标签: java generics

我根本不是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

怎么了?

2 个答案:

答案 0 :(得分:1)

getGenericSuperclass method,顾名思义,返回一个代表类的超类的Type,而不是类本身。

此处,typeClass的{​​{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中实际上是不可能的。