gpt4 book ai didi

java - 通配符,它​​是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 07:53:52 25 4
gpt4 key购买 nike

代码:

List<? extends Integer> ints= new ArrayList<Integer>();
ints.add(3);//error

我还是不明白它是如何工作的。 问题:

CAP#1 是什么意思?它是引用类型吗?我认为,不,因为 CAP#1 没有继承自 Object。我们可以编写 ints.add(null);//OK 并且我们没有编译时错误。但是我们不能写null instanceof CAP#1;//编译时错误。为什么我们不能实例化 CAP#1:

CAP#1 c= new CAP#1();

CAP#1 出现在什么地方?

最佳答案

CAP#1是由' ? 表示的隐式类型变量的编译器名称'.没有这样的命名类型,但编译器需要为该类型创建一个占位符才能完成其工作。该名称代表“捕获”。

它有助于在头脑中重写像 G<? extends T> 这样的类型至 ∃CAP#1 extends T: G< CAP#1 > .

您不能向具有通配符扩展类型的列表添加任何内容,因为您不知道该通配符代表什么。就像你不能添加 SnakeList< Mammal > ,您不能将其添加到 List< ? extends Animal >因为那个?可能会代表 Mammal .

但是,您始终可以添加 null在这种情况下因为null实际上是每个引用类型的成员,它必然包括 ? 中的任何内容可能代表。

我经常想知道为什么 Java 不处理 List< ? extends F >对于某些最终类型 FList< F >相同.也许是因为 F本身可以是通用通配符类型,这意味着它仍然可以有任意多个子类型。

除了 Angelika Langer 关于 Java 泛型的著名常见问题之外,我一直在编译 some things关于他们在我自己的列表中。

关于java - 通配符,它​​是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311808/

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