猿问

之间有什么区别?Java泛型中的对象和对象?

我正在使用Eclipse来帮助我清理一些代码以正确使用Java泛型。大多数时候,它在推断类型方面做得非常出色,但是在某些情况下,推断类型必须尽可能地通用:对象。但是Eclipse似乎给了我一个选择,可以选择在对象类型还是“?”类型之间进行选择。


那么两者之间有什么区别?


HashMap<String, ?> hash1;


HashMap<String, Object> hash2;


宝慕林4294392
浏览 367回答 3
3回答

白猪掌柜的

考虑这个问题的另一种方法是HashMap<String, ?> hash1;相当于HashMap<String, ? extends Object> hash1;将此知识与Java Generics and Collections的第(2.4)节中的“获取和放置原理”相结合:获取和放置原则:仅从结构中获取值时使用扩展通配符,仅将值放入结构中时使用超级通配符,获取和放置时均不使用通配符。希望可以开始使用通配符。

慕少森

协方差以上的答案涵盖了大多数情况,但缺少一件事:“?” 在类层次结构中包含“对象”。您可以说String是Object的一种,而Object是?的一种。并非所有对象都匹配Object,但是所有对象都匹配?。int test1(List<?> l) {&nbsp; return l.size();}int test2(List<Object> l) {&nbsp; return l.size();}List<?> l1 = Lists.newArrayList();List<Object> l2 = Lists.newArrayList();test1(l1);&nbsp; // compiles because any list will worktest1(l2);&nbsp; // compiles because any list will worktest2(l1);&nbsp; // fails because a ? might not be an Objecttest2(l2);&nbsp; // compiled because Object matches Object
随时随地看视频慕课网APP

相关分类

Java
我要回答