为什么除了null外,任何元素不得添加到上<? extends T>

这篇具有很好参考价值的文章主要介绍了为什么除了null外,任何元素不得添加到上<? extends T>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用泛型类型参数限定为<? extends T>时,我们无法确定实际类型参数是什么。这意味着我们只能安全地读取该类型的数据,但不能写入除了null以外的任何元素。

下面是一个示例代码,说明为什么无法向<? extends T>类型的集合中添加任何元素:

public static <T> void addElements(List<? extends T> list, T element) {
    // 编译错误:无法添加元素到通配符类型的列表
    list.add(element);
}

public static void main(String[] args) {
    List<Integer> integerList = new ArrayList<>();
    integerList.add(1);
    integerList.add(2);
    
    List<? extends Number> numberList = integerList;
    // 编译错误:无法添加元素到通配符类型的列表
    addElements(numberList, 3);
}

在上面的示例中,我们有一个integerList,它是一个List<Integer>类型的列表。然后我们将其赋值给一个通配符类型的列表numberList,其中限定了元素必须是Number或其子类。

addElements方法中,我们试图向list参数中添加一个元素。但是,由于list的类型是<? extends T>,编译器无法确定具体的类型参数是什么,无法保证添加的元素类型是安全的。

因此,编译器会报错,阻止我们向numberList中添加元素。这是为了确保类型安全性,防止我们向可能具有不兼容类型的列表添加元素。

总结起来,无法向<? extends T>类型的集合中添加除了null以外的任何元素,是因为编译器无法确定实际类型参数是什么,无法保证添加的元素类型的安全性。文章来源地址https://www.toymoban.com/news/detail-516855.html

到了这里,关于为什么除了null外,任何元素不得添加到上<? extends T>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 0062__对象指针为NULL,为什么还是可以调用成员函数

    对象指针为NULL,为什么还是可以调用成员函数_空对象指针为什么能调用函数_一颗石头崽儿的博客-CSDN博客

    2024年02月10日
    浏览(31)
  • C++ vector元素类型为什么不能是引用

    vectorT 引用必须要进行初始化,不能初始化为空对象,初始化后不能改变指向 引用是别名,不是对象,没有实际地址, 不能定义引用的指针 ,也 不能定义引用的引用 推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家: 零声白金学习卡(含基础架构/高性能存储

    2024年02月15日
    浏览(50)
  • Python冷知识-为什么切片和区间会忽略最后一个元素

    在 Python 里,像列表(list)、元组(tuple)和字符串(str)这类序列类型都支持切片操作,但是实际上切片操作比人们所想象的要强大很多。 在切片和区间操作里不包含区间范围的最后一个元素是 Python 的风格,这个习惯符合 Python、C 和其他语言里以 0 作为起始下标的传统。

    2024年02月14日
    浏览(39)
  • 为什么在js中需要添加addEventListener()?

    addEventListener(监听器)--- EventTarget.addEventListener() 方法将指定的监听器注册到 EventTarget 上,当该对象触发指定的事件时,指定的回调函数就会被执行。事件目标可以是一个文档上的元素 Element、Document 和 Window,也可以是任何支持事件的对象(比如 XMLHttpRequest)。 addEventListener(

    2024年02月19日
    浏览(23)
  • C#: Json序列化和反序列化,集合为什么多出来一些元素?

    如下面的例子,很容易看出问题: 如果类本身的无参构造函数, 就添加了一些元素,序列化,再反序列化,会导致元素增加。 如果要避免,必须添加: new JsonSerializerSettings() { ObjectCreationHandling = ObjectCreationHandling.Replace }

    2024年02月10日
    浏览(43)
  • git将文件或目录添加进了.gitignore文件,为什么不生效?

    如题,之所以将文件添加进了.gitignore文件但不生效,是因为该文件已经被add进git仓库了,已经被git托管了,这时git就没法ignore了。解决办法是先用git rm --cached将这些文件从git仓库中取消托管并提交,然后.gitignore文件才会生效。详细见如下描述。 已经添加到git仓库中的文件,

    2024年02月03日
    浏览(39)
  • Netty为什么高效,为什么这么受欢迎?

    上篇文章通过 Java NIO 的处理流程与 Netty 的总体流程比较,并结合 Netty 的源码,可以更加清晰地理解Netty。本文将结合源码详细解析Netty的高效和强大功能的设计原理,学习 Netty 是如何实现其卓越的性能和功能特性,也希望可以在日后工作中利用到 Netty 的设计思想。 我们先看

    2024年02月12日
    浏览(57)
  • Redis—Redis介绍(是什么/为什么快/为什么做MySQL缓存等)

    一、Redis是什么 Redis 是一种 基于内存的数据库 ,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于 缓存,消息队列、分布式锁等场景 。         Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、

    2024年02月10日
    浏览(52)
  • AIMD 为什么收敛(tcp reno/cubic 为什么好)

    TCP 拥塞控制目标是缓解并解除网络拥塞,让所有流量公平共享带宽,合在一起就是公平收敛。 AIMD(几乎所有与拥塞控制相关的协议或算法都有 AIMD 的影子,包括 RoCE,BBRv2) 为什么收敛?我一般会给出下面的老图: 虽然只展示了两条流的收敛,但 n 条流收敛的展示无非就是将

    2024年02月06日
    浏览(63)
  • tcp 为什么要三次握手,两次不行吗?为什么?

    TCP使用三次握手(Three-Way Handshake)的过程是为了确保双方建立起可靠的通信连接,并在连接的建立过程中协商必要的参数。两次握手是不够的,原因主要有以下几点: 防止已失效的连接请求被接受: 假设有A和B两台主机,A向B发送了一个连接请求,但由于某些原因导致连接建

    2024年02月20日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包