gpt4 book ai didi

java - 通配符在 Java 中的工作原理

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:50 25 4
gpt4 key购买 nike

我正在阅读有关泛型通配符的 Java 教程。在以下代码中:

void printCollection(Collection<Object> c) {
for (Object e : c) {
System.out.println(e);
}
}

这是否意味着集合 cobject 类型作为其元素,我们不能调用 c.add("apple") ,因为“apple”是一个字符串并且 for 循环从集合 c?

中获取任何 object 元素

但是我看不懂下面的代码,

void printCollection(Collection<?> c) {
for (Object e : c) {
System.out.println(e);
}
}

这段代码使用了通配符,意思是“一个元素类型匹配任何东西的集合”。这是否意味着我们可以向其中添加任何类型的对象,例如c.add("string");c.add(1);c.add(new apple()); ?并且 for 循环从集合 c 中获取任何对象 e,如果 c 不是 object 类型,我们说c 的元素是 Integer。这段代码有效吗?这是否意味着它应该转换?

最佳答案

你几乎完全倒过来了。

A Collection<Object>可以包含 Object和它的子类,因为一切(包括 String )都是 Object 的子类,您可以向此类集合中添加任何内容。但是,您不能对其内容做出任何假设,除非它们是 Object。秒。

另一方面,A Collection<?>仅包含特定未知 类型(及其子类)的实例,但由于您不知道它是哪种 类型,因此您无法添加任何内容(null 除外)到这样的集合,也不对其内容做任何假设(除了它们是 Object s,因为一切都是)。

关于java - 通配符在 Java 中的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5817075/

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