Java中的泛型(和通配符)
我正在阅读
Java的一本书告诉我,以下两段代码是等价的:
public <T extends Animal> void takeThing(ArrayList<T> list) public void takeThing(ArrayList<? extends Animal> list); 在相反的页面上,我被告知后一段代码使用’?’作为通配符,意味着什么都不能添加到列表中. 这是否意味着如果我有一个列表(或其他集合类型?),我不能让它们同时接受多态参数并且可以重新调整大小?或者我只是误解了什么? 所有帮助/评论都表示赞赏,即使他们略微偏离主题.谢谢. 解决方法
没有. 这两段代码并不完全等效.在第一行中,方法takeThing具有类型参数T.在第二行中,您使用通配符. 当您使用第一个版本时,您将指定将用于T的具体类型.因为具体类型是已知的,所以添加到列表没有问题. 在第二个版本中,您只是说“list是一个ArrayList,其中包含一些扩展Animal的未知类型的对象”.究竟是什么类型,不知道.您无法将对象添加到此类列表中,因为编译器没有足够的信息(它不知道实际类型是什么)来检查您是否应该允许添加到列表中的内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |