我得到以下代码的编译错误。?means接受我们分配的任何类型的东西。我有对象类型和传递对象类型。但是为什么我会遇到编译错误呢?
NavigableSet<?> set = new TreeSet<Object>();
set.add(new Object());发布于 2014-04-25 21:14:16
对于变量NavigableSet<?>,编译器只知道它是一个NavigableSet,但不知道它的类型,所以添加任何对象都是安全的。
例如,这可能是代码:
NavigableSet<?> set = new TreeSet<String>(); // ? could be String
set.add(new Object()); // can't add Object to a Set<String>发布于 2014-04-25 21:09:26
您使用<?>丢失了变量的具体类型,因此add无法工作。
所以你需要写下:
NavigableSet<Object> set = new TreeSet<Object>();
set.add(new Object());发布于 2014-04-25 21:11:00
当你声明NavigableSet<?> set时,你的方法add看起来像add(? arg)。Java不能从?中检索类型。
这与PECS原则有关
要解决这个问题,只需使用super作为通配符。
NavigableSet<? super Object> set = new TreeSet<>();
https://stackoverflow.com/questions/23294030
复制相似问题