Java中 ? extends T 和 ? super T 的理解
有关extends和super的理解
class Food{}
class Fruit extends Food{}
class Apple extends Fruit{}
public void test() {
//表示只知道元素是Fruit子类,但不知道是那个子类,所以不允许任何继承于Fruit的子类存入该集合
//但是允许从该集合中获取元素,获取的元素可以向上转型为Furnit
List<? extends Fruit> fruits = new ArrayList<>();
Fruit fruit = fruits.get(0);
//表示只知道元素是Fruit或Fruit的基类(父类),但是不知道元素是Fruit的那个超类,所以不允许存Fruit的任何超类,
//既然元素是Fruit的基类,那往里存粒度比Fruit小的都可以,所以可以往里面存Fruit及其子类
List<? super Fruit> fruits2= new ArrayList<>();
fruits2.add(new Fruit());
fruits2.add(new Apple());
}
本文详细解析了Java中? extends T和? super T在泛型中的用法。? extends Fruit表示集合元素是Fruit的子类,只能取出不能存入;? super Fruit则表示元素是Fruit或其父类,能存入Fruit及其子类,但不能取出具体类型。通过实例代码展示了这两种通配符的应用场景。
1199

被折叠的 条评论
为什么被折叠?



