为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

宝慕林4294392 2019-11-07 12:43:04
我正在使用Eclipse来帮助我清理一些代码以正确使用Java泛型。大多数时候,它在推断类型方面做得非常出色,但是在某些情况下,推断类型必须尽可能地通用:对象。但是Eclipse似乎给了我一个选择,可以选择在对象类型还是“?”类型之间进行选择。那么两者之间有什么区别?HashMap<String, ?> hash1;和HashMap<String, Object> hash2;
查看完整描述

3 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

考虑这个问题的另一种方法是


HashMap<String, ?> hash1;

相当于


HashMap<String, ? extends Object> hash1;

将此知识与Java Generics and Collections的第(2.4)节中的“获取和放置原理”相结合:


获取和放置原则:仅从结构中获取值时使用扩展通配符,仅将值放入结构中时使用超级通配符,获取和放置时均不使用通配符。


希望可以开始使用通配符。


查看完整回答
反对 回复 2019-11-07
?
慕少森

TA贡献2019条经验 获得超9个赞

协方差以上的答案涵盖了大多数情况,但缺少一件事:


“?” 在类层次结构中包含“对象”。您可以说String是Object的一种,而Object是?的一种。并非所有对象都匹配Object,但是所有对象都匹配?。


int test1(List<?> l) {

  return l.size();

}


int test2(List<Object> l) {

  return l.size();

}


List<?> l1 = Lists.newArrayList();

List<Object> l2 = Lists.newArrayList();

test1(l1);  // compiles because any list will work

test1(l2);  // compiles because any list will work

test2(l1);  // fails because a ? might not be an Object

test2(l2);  // compiled because Object matches Object


查看完整回答
反对 回复 2019-11-07
  • 3 回答
  • 0 关注
  • 366 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信