我试图定义一个操作++
为我定制Map
类型是这样的:双通配符泛型类型错误
@Override
public MutableMap<K, V> $plus$plus(Map<? extends K, ? extends V> map)
{
HashMap<K, V> copy = this.copy();
map.$plus$plus$eq(map);
return copy;
}
的++=
运营商的定义是这样的:
public void $plus$plus$eq(Map<? extends K, ? extends V> map);
然而,编译器在map.$plus$plus$eq(map);
行抱怨,出现以下疯狂错误:
The method $plus$plus$eq(Map<? extends capture#10-of ? extends K,
? extends capture#11-of ? extends V>) in the type
Map<capture#10-of ? extends K,capture#11-of ? extends V> is not
applicable for the arguments
(Map<capture#12-of ? extends K,capture#13-of ? extends V>)
正如你在这张截图看到,没有通过Eclipse的工作提供了,但单独的解决方案,甚至意义:
我一直在Java泛型相当长一段时间的工作,现在,甚至已经开发我自己的自定义编程类型系统(我目前正在编码的库),但我从来没有像这样的错误。
编辑:有趣的是,铸造map
参数的原始类型(Map)
似乎来解决这个问题。
map.$plus$plus$eq((Map) map);
但是,改变投地(Map<?, ?>)
(这是Eclipse的第二个解决方案所做的)会导致类似的错误。
你使用什么编译器? –
以下哪些类是您的自定义类? Map是java.util.Map吗? –
Eclipse月神服务版本2(4.4.2),目标兼容性1.8。 – Clashsoft