桥接方法中缺少参数化类型的参数[重复]

问题描述 投票:0回答:1
class A {

    public void doit(List<String> args) {
    }

    public static class C extends A {

       public static void main(String[] args) throws Exception {
          Method m = C.class.getMethod("doit", List.class);
          Type ptype = m.getParameters()[0].getParameterizedType();
          System.out.println("type is -> " + ptype);
    }
}

输出是

类型是 -> 接口 java.util.List

反射得到的

doit()
方法确实是编译器生成的,是一个综合桥接方法。但是,参数的参数化类型信息String丢失了。

有人知道为什么吗?如果我们想获取参数化类型,也许一个解决方法是公开 A

java type-erasure
1个回答
-1
投票
发生这种情况是因为运行时泛型的类型擦除。参数化类型仅存在于编译类型中。这与许多需要查找事物的实际类型的库传递带有正确的预期类类型的附加参数的原因相同,伪代码:

List<T> find(criteria, Class<T> theClass) List<Customer> = find(..., Customer.class)
    
© www.soinside.com 2019 - 2024. All rights reserved.