3-4 Java泛型

一.泛型通配符

<? extends T>和<? super T> 是 Java 泛型中的"通配符"和"边界"的概念。
<? extends T>:是指 “上界通配符 意思是可以接受子类的集合 只能取不能插入
<? super T>:是指 “下界通配符 意思是可以接受父类的集合   只能插入不能取

使用 extends 和 super 的目的是:是使容器之间具有继承关系的
public class Main {

    public static void main(String[] args){
        ArrayList<Foot> foots=new ArrayList<>();
        ArrayList<Fruit> fruits=new ArrayList<>();
        ArrayList<Apple> apples=new ArrayList<>();
        ArrayList<Banana> bananas=new ArrayList<>();

        foots.add(new Foot("煎饼"));
        fruits.add(new Fruit("水果"));
        apples.add(new Apple("红苹果"));
        bananas.add(new Banana("黄香蕉"));

        putExtends(fruits);
        putSuper(foots);

    }
    //上界通配符  只能取 不能插入

    //只有是 fruit 的集合或Fruit 子类的集合才可以赋值给 ArrayList<? extends Fruit> fruits
    //所以 ArrayList<? extends Fruit> fruits中每一个元素都是 可以转换成 Fruit 的所以只能取
    //存的话:因为ArrayList<? extends Fruit> fruits有可能是 ArrayList<Apple>集合 也有可能是 ArrayList<Banana>集合
    //无法确定是哪个集合,所以不能存放元素,不知道在ArrayList<? extends Fruit> fruits中是存 Apple 好还是 Banana 好,
    //就和子类都可以转换成父类,但是父类不可以转换成子类是一个意思
    public static void putExtends(ArrayList<? extends Fruit> fruits){
        System.out.println(fruits.get(0).getName());//
    }
    
    //上界通配符  只能插入 不能取

    //只有 Fruit 的集合和 Fruit 父类的集合才可以赋值给ArrayList<? super Fruit> fruits
    //所以ArrayList<? super Fruit> fruits 代表的都是 Fruit 父类的集合,子类的集合当然可以转换成父类的集合所以只能存
    //对于取得话,因为ArrayList<? super Fruit> fruits代表的是  Fruit集合以及Fruit 父类的集合,所以父类的集合有可能是
    //ArrayList<Foot> 集合,也有可能是 ArrayList<Object>集合,所以取出的元素只能是 Object,所以不能取
    public static void putSuper(ArrayList<? super Fruit> fruits){
        fruits.add(new Fruit("水果2"));
        System.out.println(fruits);
    }


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值