我試圖定義一個操作++
爲我定製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