Java中的泛型(和通配符)

前端之家收集整理的这篇文章主要介绍了Java中的泛型(和通配符)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在阅读 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的未知类型的对象”.究竟是什么类型,不知道.您无法将对象添加到此类列表中,因为编译器没有足够的信息(它不知道实际类型是什么)来检查您是否应该允许添加到列表中的内容.

原文链接:https://www.f2er.com/java/444667.html

猜你在找的Java相关文章