Java 泛型编程详解(4)

七、泛型类与子类型
    在谈这一小节时,先回顾一下泛型方法的“extends”含义,泛型的“extends”与继承的“extends”并不一样,泛型的“extends”其后可以是一个类(如T extends Number),同样也可以是一个接口(如T extends List<T>)。泛型的”extends“代表子类型,而不是子类,或许你可以把等其同于”extends(继承)“和”implement的并集。
    在泛型里,也存在子类型,前提是其泛型参数的限制并没有改变,可以认为泛参没有改变,其实就是从原来的类或接口来判断泛型的子类型。为了形象理解,我们已collection类来作个例子,如:ArrayList<E> implement List<E>,而List<E> extends  Collection<E>,那么ArrayList<String>就是List<String>的子类型,而List<String>则是Collection<String>,其关系图如下:

Java 泛型编程详解

深入一点来谈,现在假设需要定义自己的List接口 — PayLoadList,其定义如下:
interface PayloadList<E,P> extends List<E> {
  void setPayload(int index, P val);
  //...
}
    如上,则下面的样例都是List<String>子类型,:
PayloadList<String,String>
PayloadList<String,Integer>
PayloadList<String,Exception> 

如图:

Java 泛型编程详解

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/9307b3733a59ee9ea5993502cfb73bf1.html