Java之泛型通配符

1.泛型通配符:

         - 通配符的基本使用

         - 通配符的高级使用 --> 受限泛型

2.通配符的基本使用:

泛型的通配符:

        不知道使用什么类型来接收的时候,此时可以使用【?】
        ? 表示未知通配符
注意:不能往该集合中存储数据,只能获取数据

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

        // 关系: String类继承Object类
        ArrayList<Object> list1 = new ArrayList<>();
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("donglan");

        // 关系: Integer类继承Number    Number类继承Object类
        ArrayList<Integer> list3 = new ArrayList<>();
        ArrayList<Number> list4 = new ArrayList<>();

        //method0(list1);
        method0(list2);
        //method0(list3);
        //method0(list4);

        method1(list1);
        //method1(list2);   编译报错  因为方法中的形参ArrayList<Object> 只能接收Object
                                        类型的,泛型不存在多态
        //method1(list3);   编译报错  因为方法中的形参ArrayList<Object> 只能接收Object
                                        类型的,泛型不存在多态
        //method1(list4);   编译报错  因为方法中的形参ArrayList<Object> 只能接收Object
                                        类型的,泛型不存在多态

        method2(list1);
        method2(list2);
        method2(list3);
        method2(list4);

    }
    //定义一个方法,可以接收以上4个集合对象
    public static void method0(ArrayList list){
        Object obj = list.get(0);
        list.add("zhangsan");
        System.out.println("obj   :"+obj);
        System.out.println("list:   "+list);
    }

    //定义一个Object的集合对象
    public static void method1(ArrayList<Object> list){
    }

    //定义一个通配符的集合对象
    public static void method2(ArrayList<?> list){
        //Object obj = list.get(0);
        //list.add("zhangsan");     编译报错,如果我们使用了通配符泛型,不能往该集合中存储数据,只能获取数据
        //System.out.println("obj:  "+obj);
        list.remove("donglan"); // 可以删除,不能添加
        System.out.println("list:  "+list);
    }
}

3.通配符高级使用 --> 受限泛型

上限:

        <? extends 类名> 只能接收该类类型或者其子类类型
下限:

         <? super 类名>   只能接收该类类型或者其父类类型

import java.util.ArrayList;

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

        // 关系: String类继承Object类
        ArrayList<Object> list1 = new ArrayList<>();
        ArrayList<String> list2 = new ArrayList<>();

        // 关系: Integer类继承Number    Number类继承Object类
        ArrayList<Integer> list3 = new ArrayList<>();
        ArrayList<Number> list4 = new ArrayList<>();

        method1(list1);
        method1(list2);
        method1(list3);
        method1(list4);

        method2(list1);
        method2(list2);
        method2(list3);
        method2(list4);

        //method3(list1); 编译报错,因为方法参数是 上限为Number,
        //method3(list2); 编译报错,因为方法参数是 上限为Number,
        method3(list3);
        method3(list4);

        method4(list1);
        //method4(list2);   编译报错,因为方法参数是 下限为Integer
        method4(list3);
        method4(list4);
    }

    // 定义一个方法,可以接收以上四种集合对象
    public static void method1(ArrayList list){
    }

    //定义一个方法,可以接收以上四种集合对象
    public static void method2(ArrayList<?> list){
    }

    // 定义一个方法,只可以接收list3和list4集合对象
    public static void method3(ArrayList<? extends Number> list){
    }

    // 定义一个方法,只可以接收list1,list3,list4集合对象
    public static void method4(ArrayList<? super Integer> list){
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值