泛型通配符

"本文详细介绍了Java中的泛型通配符使用,包括不限定上下限的通配符和受限泛型。通过示例展示了"? extends Number"作为上限限定,允许传入Number及其子类的集合,而"? super Number"作为下限限定,可以接受Number及其父类的集合。此外,还强调了泛型通配符仅用于接收数据,不适用于定义集合泛型,并且不能用Object接收泛型数据。"
摘要由CSDN通过智能技术生成

泛型通配符

在这里插入图片描述
如上图所示,print方法下就确定泛型类型的话,不是很方便,无法打印其他泛型类型的集合元素,因此,需要用到泛型通配符------"?"。若改成 public static void print(ArrayList<?> list),则不会出现上述问题。
在这里插入图片描述
注意:1.在定义集合泛型的时候不能用通配符,会报错,它只用于接收数据!
2.另外,泛型没有继承的概念,所以不能用object来接收数据。
3. 如果使用迭代器来遍历输出元素,在用next方法接收的时候用object来定义变量名。

在这里插入图片描述
2.
在这里插入图片描述
3.

在这里插入图片描述

通配符高级使用–受限泛型

  1. 泛型的上限限定: ? extends E 代表使用的泛型只能是E类型的子类/本身

  2. 泛型的下限限定: ? super E 代表使用的泛型只能是E类型的父类/本身

已知Java中:

  1. Integer extends Number extends Object

Integer是Number的子类是Object的子类

  1. String extends Object
    String是Object的子类

    观察下面代码及报错:

public class Demo06Generic {
    public static void main(String[] args) {
        Collection<Integer> list1 = new ArrayList<Integer>();
        Collection<String> list2 = new ArrayList<String>();
        Collection<Number> list3 = new ArrayList<Number>();
        Collection<Object> list4 = new ArrayList<Object>();

        getElement1(list1);
        //getElement1(list2);//报错
        getElement1(list3);
        //getElement1(list4);//报错

        //getElement2(list1);//报错
        //getElement2(list2);//报错
        getElement2(list3);
        getElement2(list4);

        /*
            类与类之间的继承关系
            Integer extends Number extends Object
            String extends Object
         */

    }
    // 泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
    public static void getElement1(Collection<? extends Number> coll){}
    // 泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
    public static void getElement2(Collection<? super Number> coll){}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值