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泛型