首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java中的泛型对象赋值

java中的泛型对象赋值
EN

Stack Overflow用户
提问于 2014-04-25 21:05:13
回答 4查看 873关注 0票数 4

我得到以下代码的编译错误。?means接受我们分配的任何类型的东西。我有对象类型和传递对象类型。但是为什么我会遇到编译错误呢?

代码语言:javascript
运行
复制
NavigableSet<?> set = new TreeSet<Object>();
set.add(new Object());
EN

回答 4

Stack Overflow用户

发布于 2014-04-25 21:14:16

对于变量NavigableSet<?>,编译器只知道它是一个NavigableSet,但不知道它的类型,所以添加任何对象都是安全的。

例如,这可能是代码:

代码语言:javascript
运行
复制
NavigableSet<?> set = new TreeSet<String>(); // ? could be String
set.add(new Object()); // can't add Object to a Set<String>
票数 4
EN

Stack Overflow用户

发布于 2014-04-25 21:09:26

您使用<?>丢失了变量的具体类型,因此add无法工作。

所以你需要写下:

代码语言:javascript
运行
复制
NavigableSet<Object> set = new TreeSet<Object>();
set.add(new Object());
票数 0
EN

Stack Overflow用户

发布于 2014-04-25 21:11:00

当你声明NavigableSet<?> set时,你的方法add看起来像add(? arg)。Java不能从?中检索类型。

这与PECS原则有关

要解决这个问题,只需使用super作为通配符。

NavigableSet<? super Object> set = new TreeSet<>();

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

https://stackoverflow.com/questions/23294030

复制
相关文章

相似问题

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