26.泛型----泛型通配符与泛型(不好理解)#

本文详细解析了Java中extends和super通配符在泛型方法和类中的应用,阐述了它们的读写限制。extends通配符用于读取操作,保证类型是Number或其子类;super通配符则用于写入操作,确保类型是Number的父类,包括Number本身。PECS原则(Producer Extends, Consumer Super)是使用这两个通配符的重要指导原则。此外,还提及了无限定通配符<?>和泛型数组的相关注意事项。

extends通配符 - 廖雪峰的官方网站研究互联网产品和技术,提供原创中文精品教程icon-default.png?t=M1FBhttps://www.liaoxuefeng.com/wiki/1252599548343744/1265105899616928

 

 

使用类似<? extends Number>通配符作为方法参数时表示:

  • 方法内部可以调用获取Number引用的方法,例如:Number n = obj.getFirst();

  • 方法内部无法调用传入Number引用的方法(null除外),例如:obj.setFirst(Number n);

即一句话总结:使用extends通配符表示可以读,不能写。

使用类似<T extends Number>定义泛型类时表示:

  • 泛型类型限定为Number以及Number的子类。

使用类似<? super Integer>通配符作为方法参数时表示:

  • 方法内部可以调用传入Integer引用的方法,例如:obj.setFirst(Integer n);

  • 方法内部无法调用获取Integer引用的方法(Object除外),例如:Integer n = obj.getFirst();

即使用super通配符表示只能写不能读。

使用extendssuper通配符要遵循PECS原则。(不明白,看文章也比较吃力)

无限定通配符<?>很少使用,可以用<T>替换,同时它是所有<T>类型的超类。

部分反射API是泛型,例如:Class<T>Constructor<T>

可以声明带泛型的数组,但不能直接创建带泛型的数组,必须强制转型;

可以通过Array.newInstance(Class<T>, int)创建T[]数组,需要强制转型

同时使用泛型和可变参数时需要特别小心

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值