繁体   English   中英

泛型Java中的对象赋值

[英]Generics Object assignment in java

我收到以下代码的编译错误。 意味着接受我们指定的任何类型的东西。 我有Object类型并传递Object类型。 但我收到编译错误的原因是什么?

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

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

例如,这可能是代码:

NavigableSet<?> set = new TreeSet<String>(); // ? could be String
set.add(new Object()); // can't add Object to a Set<String>

您使用<?>松散了变量的具体类型,因此添加无效。

所以你需要写:

NavigableSet<Object> set = new TreeSet<Object>();
set.add(new Object());

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

这与PECS原理有关

要解决它只需使用super作为通配符。

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

类型在编译时是不可知的,对于类型? 我们用? 当方法不依赖于类型时。 因为add方法取决于类型, ? 不适合这个。

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

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

但是, NavigableSet没有符合此条件的方法,因此找不到方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM