加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java中的泛型(和通配符)

发布时间:2020-12-14 19:24:14 所属栏目:Java 来源:网络整理
导读:我正在阅读 Java的一本书告诉我,以下两段代码是等价的: public T extends Animal void takeThing(ArrayListT list)public void takeThing(ArrayList? extends Animal list); 在相反的页面上,我被告知后一段代码使用’?’作为通配符,意味着什么都不能添加到
我正在阅读 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的未知类型的对象”.究竟是什么类型,不知道.您无法将对象添加到此类列表中,因为编译器没有足够的信息(它不知道实际类型是什么)来检查您是否应该允许添加到列表中的内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读