几天前我在写一个简单的Java程序,我发现这段代码不起作用(它给出了一个编译时错误):
ArrayList<Document> docs = new ArrayList<Book>();
其中 Document 是一个接口,Book 实现 Document。
为什么 Java 中的继承不适用于泛型?如果我想让该代码工作,我必须使用通配符,如下所示:
ArrayList<? extends Document> docs = new ArrayList<Book>();
我想知道这是什么原因?如果我需要一个 ArrayList of Documents,并且我知道 Book 也是一个 Document,为什么我不能将 Books 的 ArrayList 用作 Documents 的 ArrayList?