【发布时间】:2013-06-16 09:00:40
【问题描述】:
前几天我在写一个简单的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?
【问题讨论】:
-
一旦你梳理了为什么你的第一个陈述不起作用的答案,请参阅 my answer to this question 以了解
extends和super的解释以及它们的作用。
标签: java