KTV和泛型(3)
泛型除了KTV,还有一个让人比较疑惑的玩意,而且它就是用来表达疑惑的:?
虽然通过泛型已经达到我们想要的效果了,例如:
List<String> list = new ArrayList<String>();
这样就可以放心地存取String类型的数据。
但是(抱歉,凡事总有个但是),应用的场景总是在不断增加的。某一天:
老板:咱们之前给客户开发的功能中有个地方要改一改。
神牛:哪里要改呢?
老板:以前你写的代码List<Cat> list = new ArrayList<Cat>();只能列出Java宠物店托管的猫咪,但是现在Java宠物店已经扩大了经营范围,希望列出他们保管所有的宠物,只要是宠物就行……
神牛:这个easy!
老板:真的吗?
于是,神牛一通操作,代码就改成了这样:
class Cat extends Pets {}; class Dog extends Pets {}; public static void main(String[] args) { List<? extends Pets> list = new ArrayList<Pets>(); Pets pets = list.get(0); Cat cat = (Cat)list.get(1); Dog dog = (Dog)list.get(2); }