首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

泛型会合和数组

2012-11-09 
泛型集合和数组集合:下面的这段代码是无效的:1ListApple apples ...2ListFruit fruits apples下

泛型集合和数组

集合:

下面的这段代码是无效的:

1List<Apple> apples = ...;2List<Fruit> fruits = apples;

下面的同样也不允许:

1List<Apple> apples;2List<Fruit> fruits = ...;3apples = fruits;

为什么?一个苹果是一个水果,为什么一箱苹果不能是一箱水果?

在某些事情上,这种说法可以成立,但在类型(类)封装的状态和操作上不成立。如果把一箱苹果当成一箱水果会发生什么情况?

1List<Apple> apples = ...;2List<Fruit> fruits = apples;3fruits.add(new?Strawberry());

如果可以这样的话,我们就可以在list里装入各种不同的水果子类型,这是绝对不允许的。

另外一种方式会让你有更直观的理解:一箱水果不是一箱苹果,因为它有可能是一箱另外一种水果,比如草莓(子类型)。

?

数组:

1Apple[] apples = ...;2Fruit[] fruits = apples;

可是稍等一下!如果我们把前面的那个议论中暴露出的问题放在这里,我们仍然能够在一个apple类型的数组中加入strawberrie(草莓)对象:

1Apple[] apples =?new?Apple[1];2Fruit[] fruits = apples;3fruits[0] =?new?Strawberry();

这样写真的可以编译,但是在运行时抛出ArrayStoreException异常

热点排行