有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我根本不是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 cannot be cast to java.lang.reflect.ParameterizedType

怎么了


共 (2) 个答案

  1. # 1 楼答案

    顾名思义,^{} method返回一个Type,它代表类的超类,而不是类本身

    这里,typeObjectClass对象,而不是TestClass

    要获取自己的类的类型参数,请使用the ^{} method

  2. # 2 楼答案

    你误解了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中,由于类型擦除,您似乎想要做的事情(在运行时获取实例的泛型类型)实际上是不可能的