java中的泛型对象分配

java中的泛型对象分配,java,generics,collections,Java,Generics,Collections,我得到以下代码的编译错误?意味着接受我们分配的任何类型的东西。我有对象类型并传递对象类型。但我得到编译错误为什么 NavigableSet<?> set = new TreeSet<Object>(); set.add(new Object()); NavigableSet集=新树集(); 添加(新对象()); 您使用松开了变量的具体类型,因此add无法工作 所以你需要写: NavigableSet<Object> set = new TreeSet<

我得到以下代码的编译错误?意味着接受我们分配的任何类型的东西。我有对象类型并传递对象类型。但我得到编译错误为什么

NavigableSet<?> set = new TreeSet<Object>();
set.add(new Object());
NavigableSet集=新树集();
添加(新对象());

您使用
松开了变量的具体类型,因此add无法工作

所以你需要写:

NavigableSet<Object> set = new TreeSet<Object>();
set.add(new Object());
NavigableSet集=新树集();
添加(新对象());

当您声明
NavigableSet set
时,您的方法add看起来像
add(?.arg)
。Java无法检索类型表单

这与原则有关

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


NavigableSet对于类型
,类型在编译时是未知的。当方法不依赖于类型时,我们使用
。由于添加方法取决于类型,
不适合这种情况

Java编译器将尝试查找与方法名称、提供的参数数量和类型匹配的方法签名。让我们对你的也这样做

name: add
number of arguments: 1
type: ? // Your issue.

但是,
NavigableSet
没有与此条件匹配的方法,因此找不到任何方法。

对于变量
NavigableSet
,编译器只知道它是
NavigableSet
,但不知道类型,因此没有可以安全添加的对象

例如,这可能是以下代码:

NavigableSet<?> set = new TreeSet<String>(); // ? could be String
set.add(new Object()); // can't add Object to a Set<String>
NavigableSet set=new TreeSet();/?可能是字符串
set.add(新对象());//无法将对象添加到集合中

@Sanjeev>类型集中的add(capture#1-of?)方法不适用于参数(Object)。它可能重复,这意味着您无法向集合中添加任何内容,但可以从中读取。阅读java泛型