为什么不起作用?

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

10-01 01:42