【集合进阶】 09-泛型的通配符

泛型的通配符

public static void main(String[] args) {
        
         泛型不具备继承性,但是数据具备继承性
        

        创建集合的对象
        ArrayList<Ye> list1 = new ArrayList<>();
        ArrayList<Fu> list2 = new ArrayList<>();
        ArrayList<Zi> list3 = new ArrayList<>();

        调用method方法
        method(list1);
        //method(list2);报错
        //method(list3);报错


        list1.add(new Ye());
        list1.add(new Fu());
        list1.add(new Zi());


    }


   
    * 此时,泛型里面写的是什么类型,那么只能传递什么类型的数据。
  
    public static void method(ArrayList<Ye> list) {

    }

案例

需求:
定义一个方法,形参是一个集合,但是集合中的数据类型不确定。
且该集合为Fu和其所有父类

已知

class Ye {
}

class Fu extends Ye {
}

class Zi extends Fu {
}

class Student2{}
public static void main(String[] args) {


        //创建集合的对象
        ArrayList<Ye> list1 = new ArrayList<>();
        ArrayList<Fu> list2 = new ArrayList<>();
        ArrayList<Zi> list3 = new ArrayList<>();

        ArrayList<Student2> list4 = new ArrayList<>();

        method(list1);
        method(list2);
        //method(list3);报错


        //method(list4);报错


    }

代码实现

public static void method(ArrayList<? super Fu> list) {

    }

泛型通配符详解

  • 此时,泛型里面写的是什么类型,那么只能传递什么类型的数据。
    • 弊端:
      利用泛型方法有一个小弊端,此时他可以接受任意的数据类型
      Ye Fu Zi Student

    • 希望:本方法虽然不确定类型,但是以后我希望只能传递Ye Fu

      此时我们就可以使用泛型的通配符:

    •  ?也表示不确定的类型
      
    •  他可以进行类型的限定
      
    •  ? extends E: 表示可以传递E或者E所有的子类类型
      
    •  ? super E:表示可以传递E或者E所有的父类类型
      
    • 应用场景:

    •  1.如果我们在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口。
      
    •  2.如果类型不确定,但是能知道以后只能传递某个继承体系中的,就可以泛型的通配符
      
    • 泛型的通配符:
      关键点:可以限定类型的范围。

总结

请添加图片描述
请添加图片描述
请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值