首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通配符,它是如何工作的?

通配符,它是如何工作的?
EN

Stack Overflow用户
提问于 2013-10-11 06:41:26
回答 2查看 107关注 0票数 1

代码:

代码语言:javascript
代码运行次数:0
运行
复制
List<? extends Integer> ints= new ArrayList<Integer>();
ints.add(3);//error

我还是不明白它是怎么工作的。问题:

CAP#1是什么意思?是参考类型吗?我想,不,因为CAP#1不是从Object继承来的。我们可以编写ints.add(null);//OK,并且没有编译时错误。但是我们不能写null instanceof CAP#1;//compile-time error。为什么我们不能实例化CAP#1

代码语言:javascript
代码运行次数:0
运行
复制
CAP#1 c= new CAP#1();

从什么CAP#1出现?

EN

回答 2

Stack Overflow用户

发布于 2013-10-11 06:52:58

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

它有助于在精神上重写一种类型,如G<? extends T>∃CAP#1 extends T: G< CAP#1 >

不能向具有通配符扩展类型的列表中添加任何内容,因为您不知道该通配符代表什么。就像不能将Snake添加到List< Mammal >中一样,也不能将其添加到List< ? extends Animal >中,因为?可能最终表示Mammal

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

我经常想知道为什么Java不像对待List< ? extends F >那样对待某些最终类型的FList< F >。也许是因为F本身可能是一个泛型通配符类型,这意味着它仍然有任意多个子类型。

除了Angelika关于Java泛型的著名常见问题外,我还在我自己的列表中编译了关于它们的有些事

票数 5
EN

Stack Overflow用户

发布于 2013-10-11 06:47:46

表示一个子类的数目或未知值。如果您获得这样一个值,它将是一个数字,但是您不能给出这个类型的值,因为您不知道哪个值是有效的。

要获得更多信息,请遵循以下答案:and List?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19311808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档