【发布时间】:2017-08-05 22:55:47
【问题描述】:
假设我有一个具有以下签名的方法:
public static <T> Set<Class<? extends T>> dosomething(Class<T> clazz)
如果我尝试使用通配符类调用它,如下例所示
Class<?> clazz = Integer.class
Set<Class<?>> result = dosomething(clazz);
编译器抱怨以下问题:
Error: incompatible types: inference variable T has incompatible equality constraints java.lang.Object,capture#1 of ?
因此解决方法是在方法调用中添加强制转换。
Set<Class<?>> result = (Set<Class<?>>) dosomething(clazz);
我想知道为什么在这种特殊情况下需要强制转换,是否有任何解决方法可以避免强制转换...... 我为此使用 java-8。 谢谢
【问题讨论】:
-
我认为编译器不知道 Class> 会扩展 T。