gpt4 book ai didi

java - Java 中的泛型(和通配符)

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:49 26 4
gpt4 key购买 nike

我正在阅读的一本关于 Java 的书告诉我以下两段代码是等价的:

public <T extends Animal> void takeThing(ArrayList<T> list)

public void takeThing(ArrayList<? extends Animal> list);

在对面的页面上,我得知后一段代码使用了 '?'作为通配符,意味着不能向列表中添加任何内容。

这是否意味着如果我有一个列表(或其他集合类型?),我不能让它们同时接受多态参数并重新调整大小?还是我只是误解了什么?

感谢所有帮助/评论,即使它们稍微偏离主题。谢谢。

最佳答案

Does this mean that if I ever have a list (or other collection types?) that I can't make them simultaneously accept polymorphic arguments AND be re-sizable?

没有。

这两段代码并不完全等价。在第一行中,方法 takeThing 有一个类型参数 T。在第二行中,您使用了通配符。

当您使用第一个版本时,您将指定用于T 的具体类型。因为具体类型是已知的,所以添加到列表中没有问题。

在第二个版本中,你只是说“list 是一个 ArrayList,它包含一些扩展 Animal 的未知类型的对象” .究竟是什么类型,尚不得而知。您不能将对象添加到这样的列表中,因为编译器没有足够的信息(它不知道实际类型是什么)来检查您添加到列表中的内容是否应该被允许。

关于java - Java 中的泛型(和通配符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13474791/

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