Java

通配符泛型

Test<SubObject>继承Test<? extends BaseObject>

Test<SubObject>和Test<T extends BaseObject>无任何关系

高级别数组可以赋给低级别数组,反之则不可以。

SubObejct[] objects=...

BaseObject[] baseObjects=objects;

java泛型都会擦除泛型类型,泛型类型转换为Object,如果使用extends,则转换为基类类型,不能用instanceof判断类型

java一般不能使用==判等,需要使用equal,==只比较引用相同

 

?super SubObject 通配符超类型,支持set

?extends BaseObject 支持get

 

向上造型一个泛型对象的引用

例如,假设我们有很多箱子,每个箱子里都装有不同的水果,我们需要找到一种方法能够通用的处理任何一箱水果。更通俗的说法,A是B的子类型,我们需要找到一种方法能够将C<A>类型的实例赋给一个C<B>类型的声明。

为了完成这种操作,我们需要使用带有通配符的扩展声明,就像下面的例子里那样:

  1. List<Apple> apples = new ArrayList<Apple>();
  2. List<? extends Fruit> fruits = apples;

“? extends”是泛型类型的子类型相关性成为现实:Apple是Fruit的子类型,List<Apple> 是 List<? extends Fruit> 的子类型。

向下造型一个泛型对象的引用

现在我来介绍另外一种通配符:? super。如果类型B是类型A的超类型(父类型),那么C<B> 是 C<? super A> 的子类型:

  1. List<Fruit> fruits = new ArrayList<Fruit>();
  2. List<? super Apple> = fruits;

 

 

 

 

 

posted on 2014-01-13 09:08  czcuestc  阅读(183)  评论(0编辑  收藏  举报