posts - 37,comments - 7,trackbacks - 0
 

泛型的引入使得 Java 语言中的类型系统更加复杂。以前,该语言具有两种类型 —— 引用类型和基本类型。对于引用类型,类型 的概念基本上可以互换,术语子类型子类 也可以互换。

随着泛型的引入,类型和类之间的关系变得更加复杂。List<Integer>List<Object> 是不同的类型,但是却是相同的类。尽管 Integer 扩展 Object,但是 List<Integer> 不是 List<Object>,并且不能赋给 List<Object> 或者强制转换成 List<Object>

另一方面,现在有了一个新的古怪的类型叫做 List<?>,它是 List<Integer>List<Object> 的父类。并且有一个更加古怪的 List<? extends Number>。类型层次的结构和形状也变得复杂得多。类型和类不再几乎是相同的东西了。

extends 的新含意 

在 Java 语言引入泛型之前,extends 关键字总是意味着创建一个新的继承自另一个类或接口的类或接口。

引入泛型之后,extends 关键字有了另一个含意。将 extends 用在类型参数的定义中(Collection<T extends Number>)或者通配符类型参数中(Collection<? extends Number>)。

当使用 extends 来指示类型参数限制时,不需要子类-父类关系,只需要子类型-父类型关系。还要记住,有限制类型不需要是该限制的严格子类型;也可以 该限制。换句话说,对于 Collection<? extends Number>,您可以赋给它 Collection<Number>(尽管 Number 不是 Number 的严格子类型)和 Collection<Integer>Collection<Long>Collection<Float> 等等。

在任何这些含意中,extends 右边的类型都可以是参数化类型(Set<V> extends Collection<V>)。

posted on 2005-08-24 11:36 Dave 阅读(186) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: