首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >两者之间的区别是什么?和Java泛型中的对象?

两者之间的区别是什么?和Java泛型中的对象?
EN

Stack Overflow用户
提问于 2009-03-24 19:14:12
回答 3查看 37.9K关注 0票数 151

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

那么它们之间的区别是什么呢?

代码语言:javascript
复制
HashMap<String, ?> hash1;

代码语言:javascript
复制
HashMap<String, Object> hash2;
EN

回答 3

Stack Overflow用户

发布于 2009-03-24 19:22:18

如果您还记得,Collection<Object>只是一个包含Object类型的对象的泛型集合,那么就很容易理解,但Collection<?>是所有类型集合的超类型。

票数 14
EN

Stack Overflow用户

发布于 2014-11-26 19:00:05

上面的协方差答案涵盖了大多数情况,但遗漏了一件事:

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

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2009-03-24 19:20:28

您不能安全地将任何内容放入Map<String, ?>,因为您不知道这些值应该是什么类型。

您可以将任何对象放入Map<String, Object>中,因为已知值为Object

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/678822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档