泛型的上下限要怎么理解

本文介绍了Java中泛型的上下限概念,通过PECS(Producer Extends Consumer Super)原则帮助理解。泛型上限适用于频繁获取数据的场景,保证只能获取指定类型或其子类的对象;而泛型下限则适用于频繁添加数据,确保可以添加指定类型或其父类的对象。博主分享了如何避免在使用泛型时混淆上限和下限,并通过示例解释了为何不能在不同限制的泛型集合中添加元素以及为何可以取出元素的原因。
摘要由CSDN通过智能技术生成

内容概览
泛型上下限理解,这下忘不了😝

博主经常混淆了泛型的上限和下限的使用。。🐖,正巧在阿里巴巴的java开发手册——《Java开发手册(嵩山版)》中看到有关泛型的这个知识点👍,写写笔记,希望不要再忘啦😄
如下图:
20201012231256
概念:PECS(Producer Extends Consumer Super) 😐

实体类

/**
 * @author RYZEYANG
 * @date 2020/10/11 23:50
 */
public class Fruit {
}
class Apple extends Fruit{}
class Pear extends Fruit{}
class Orange extends Fruit{}

泛型的上限

如下图,可以看到这里是不允许再添加任何实例的,只能从该list中去获取实例。
20201012082704

为什么不能添加呢?🐖

因为这个list 可能有以下几个情况

  1. list是Fruit类型的,此时你去添加Fruit的子类都没问题
  2. list是Apple类型的,此时你只能添加Apple,同理Pear,Orange也是。🙃

根本不晓得传进来的参数list会是哪种类型,当然不能随意添加啦,
如果list是Apple类型的,那就不能添加除Apple之外的,那如果是Pear呢,也一样,所以就全都不能添加啦。

为什么可以取出呢?🐖

因为我们从list中拿出来的必定是Fruit类型的,毕竟Apple等都去继承Fruit了,可以自动向上转型

泛型的下限

如图,下限和上限相反,上限get,下限add

可以看到下图get拿到的都是object类型,没有意义🐖
20201012082940

为什么super可以添加呢?🐖

这里定义了下限是Fruit,也就是说这个list里面的类型都是Fruit的父类,所以我们只能添加Fruit和他的子类。

为什么不可以取出呢?🐖

因为取的时候没法确实是Fruit的哪个父类,最后都只能获取我们的根类Object

小结

泛型的上限<? extends T>用在频繁获取数据的场景,
泛型的下限<? super T>用在频繁添加数据的场景

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值