gpt4 book ai didi

java - 编译器如何区分 from 当它们在类型删除后看起来都被编译成相同的东西时?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:04 26 4
gpt4 key购买 nike

我正在努力理解 java generic covariancy , 我明白为什么

List<Number> list = new ArrayList<Integer>();
Integer = list.get(0);

是不允许的,因此不会将 float 放入列表中并在以后引起问题。我相信类型删除会将其编译为:

List list = new ArrayList();
Integer = (Integer) list.get(0);

这是允许的:

List<? extends Number> list = new ArrayList<Integer>();
Integer = list.get(0);

在类型删除之后,这不会编译成同样的东西吗?通配符如何帮助编译器强制不将包含整数的 float 放入列表中?

最佳答案

如果你有List<? extends Number> list ,您不能将任何内容放入结果列表中。您的列表是“包含一些扩展 Number 的对象的列表”,因此调用 add() with any argument 与此类型不兼容。所以这就是编译器控制您是否不放置 float 的方式:它不允许放置任何东西。

通常您将类型更改为 List<? extends Number>仅在您不再打算修改列表而只想阅读它的地方。

关于java - 编译器如何区分 <? extends Number> from <Number> 当它们在类型删除后看起来都被编译成相同的东西时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34846294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com