【发布时间】:2014-06-26 04:31:26
【问题描述】:
1. List<Car> carList = new ArrayList<Sedan>();
2. List<Car> carList = new ArrayList<Car>();
carList.add(new Sedan());
1 有编译错误,2 是合法的。
为什么变量声明的类型必须与我们传递给对象类型的类型匹配(不允许派生类型)? 我使用 Array 如下,这是绝对正确的:
int SIZE = 10;
Car[] carArray = new Sedan[SIZE];
谁能告诉我为什么集合必须声明为条件 2?谢谢
【问题讨论】:
-
@Takendarkk 我知道它是泛型,但泛型是在谈论使用尖括号作为类型,而不是关于超类和子类,不是吗?
-
@haifzhan 你真的认为超/子类与类型无关吗?
-
@Takendarkk 我不是说超类和子类与类型无关,我是在问你为什么它们与泛型有关,我期待答案
-
数组实现被广泛认为是一个错误,幸好没有在 Collections 中重复
标签: java generics collections typesafe