泛化类的定义中<? extends T>和<? super T>各代表啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泛化类的定义中<? extends T>和<? super T>各代表啥意思?相关的知识,希望对你有一定的参考价值。

请举几个例子说明这两种方法该如何正确使用,尤其是对于要求返还T类型的方法该如何定义。

参考技术A 1. <? super T> 表示以T类型为下限的某种类
实例化的时候对象的泛型一定要大于等于T类型(也就是T的父类或自己)
使用的时候类型一定要小雨等于T类型(也就是T的子类或自己)

2. <? extends T> 表示以T类型为上线的某种类
实例化的时候对象的泛型一定要小于等于T类型(也就是T的子类或自己)

3. demo
List<? extends Fruit> list = new ArrayList<Apple>();
list.add(null); // right
list.add(new Fruit()); //error
list.add(new Apple()); //error
list.add(new SmallApple()); //error
// <? extends T>是T的某种子类,能放入子类的容器不一定放入超类,也就是没可能放入T

List<? super Apple> list = new ArrayList<Fruit>();
list.add(null); // right
list.add(new Fruit()); // error
list.add(new Apple()); // right
list.add(new SmallApple()); // right
参考技术B 第一个表示尖括号中类型必须是T的子类或T自己,第二个表示尖括号中类型必须是T的超类或T自己 参考技术C <? extends T>代表方括号中必须是任意的T的子类或者T自己

以上是关于泛化类的定义中<? extends T>和<? super T>各代表啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解 Java 中的 lt;T extends Comparable<

Java 泛型 lt;super T>中 super 怎么 理解?与 extends 有何不同

Java 泛型 lt;super T>中 super 怎么 理解?与 extends 有何不同

Java 泛型 Class<? extends T>

Java泛型<? extends T>和<? super T>

如何理解 Java 中的 lt;T extends Comparable<