[英]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.