泛型通配符

本文深入解析Java泛型中通配符的使用,包括上界通配符<? extends xx>和下界通配符<? super xx>的区别,通过具体代码示例阐述其在读取和写入操作中的应用,并介绍PESC原则。

1.通配符

泛型通配符有两种

上界通配符<? extends xx> 

下界通配符<? super xx>

2.举例说明

先上代码吧

class A{
    
}
class B extends A{
    
}
class C extends A{
    
}
public class NonCovariantGenerics {
    public static void main(String[] args) {
        List<? extends A> list1= new ArrayList<B>();
        List<? super B> list2= new ArrayList<B>();
        //list1.add(new B()); 编译出错
        list2.add(new B());
    }
    public static <T>  void f1(List<T> list,T item) {
        list.add(item);
    }

}

结构很简单的类,B和C都继承基类A.

<? extends A>的意思表示某一个类,这个类是继承自A,确定了上界,但是问题就来了,继承A的类有B和C,编译器无法确定具体的子类型,所以编译出错.

<? super B>表示某一个类,这个类是B的父类(超类),确定了下界,也就是说,<? super B>表示B,A以及B的其他父类(java只有单继承,这里只是举例),虽然不确定是具体的哪一个父类,但是<? super B> 包含了B,所以编译不出错.

3.总结

读取用 extends

写入用super

(拓展)PESC 原则(Producer Extends Consumer Super)

  

  

转载于:https://www.cnblogs.com/lishuaiqi/p/10328202.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值