我正在尝试为我的自定义 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);
然而,将cast更改为
(Map<?, ?>)
(这是Eclipse的第二种解决方案所做的)会导致类似的错误。
copy
而不是被你修改后的那个映射表呢? - Makotocopy.$plus$plus$eq(map);
- Gábor Bakoscopy.$plus$plus$eq(map)
。 :/ - Clashsoft