【发布时间】:2012-06-16 03:17:38
【问题描述】:
鉴于此代码:
List<Integer> ints = new ArrayList<Integer>();
// Type mismatch:
// cannot convert from Class<capture#1-of ? extends List> to Class<List<Integer>>
Class<List<Integer>> typeTry1 = ints.getClass();
// Type safety:
// Unchecked cast from Class<capture#2-of ? extends List> to Class<List<Integer>>
Class<List<Integer>> typeTry2 = (Class<List<Integer>>) ints.getClass();
// List is a raw type. References to generic type List<E> should be parameterized
Class<? extends List> typeTry3 = ints.getClass();
有没有办法在没有错误或警告的情况下获得List<Integer> 的Class?我可以很容易地抑制警告,但如果 Java 要求我抑制这个有效代码的警告,我非常喜欢disappoint。
另一方面,如果警告抑制是唯一的方法,那么什么是最安全的抑制呢?
【问题讨论】:
-
显然没有警告免费方式,因为擦除。 stackoverflow.com/questions/339699/…
-
对于 Class 对象引用使用具体的泛型类型确实没有意义,因为该信息在被引用的对象中不存在,所以在我看来
Class<? extends List>或Class<? extends List<?>>是变量的最佳类型。尽管我找不到通配符目标类型的无警告强制转换,但我感到很惊讶......但是,由于 Class 对象主要用于反射,所以使用Class<?>可能会很好,它可以在没有警告的情况下工作跨度>