为什么不起作用?
public class FooImpl implements Foo { /* ... */ }
public class Main {
public static <T> Collection<T> getList(Class<? extends T> itemClass) { /* ... */ }
public static void main(String[] args) {
Collection<Foo> foos = getList(FooImpl.class);
}
}
在声明
foos
的行上,出现“ Incompatible types. Required: Collection<Foo>, found: Collection<FooImpl>
”错误。知道为什么吗? 最佳答案
试试这个 :
Collection<Foo> foos = Main.<Foo>getList(FooImpl.class);
创建
getList()
方法时,它说将用T键入。并且还说,它将需要T的子类型(确切地说是T的子类型的类)的参数。由于您从未指定T是什么,因此getList假定它将是
FooImpl
,因此getList()
返回FooImpl
的集合。使用我给您的解决方案,您指定T为
Foo
,因此该参数将需要为Foo
的子类型。例如FooImpl
。资源:
JLS - Generic methods