2017-09-24 120 views
-3

我想創建一個泛型類ExtendedMap只接受Strings如何創建特定的泛型類?

我嘗試下面的代碼,但它給我的錯誤:

The method put(K, V) of type ExtendedMap must override or implement a supertype method

class ExtendedMap<K, V> extends HashMap<String, String> { 

    private Map<K, Collection<V>> map = new HashMap<>(); 

    @Override 
    public void put(K key, V value) { 
     if (map.get(key) == null) 
      map.put(key, new ArrayList<V>()); 

     map.get(key).add(value); 
    } 

} 

正如在回答表明我已經更新了代碼,但現在它不編譯

+0

你聲明'ExtendedMap'是'HashMap 的子類,這意味着它的鍵和值是字符串。但是你試圖重寫'put',以便它的鍵值是K和V.類型只是類型不正確。另外,你試圖改變返回類型,這是不允許的(除非返回類型是協變的)。 –

+0

它看起來像你試圖將繼承與組合。你可能根本不想擴展'HashMap';而是擴展類似'AbstractMap >'。但是你仍然需要以類型正確的方式重寫這些方法。 –

+0

你的類不應該同時包含* HashMap和* HashMap。選一個。 – Andreas

回答

1

簡單:省略類型變量。

class ExtendedMap extends HashMap<String, String> 

你得到的警告不是語言規範所要求的;我想這只是你的IDE試圖確保你輸入了你的意思。但由於沒有擴展String的類,因此類型變量中沒有值:省略它們,並直接使用String

+0

謝謝安迪,但現在它不是編譯,我更新了我的完整代碼,請分享您的知識... :( –

0

ExtendedMap類期望延伸String類的某種類型的參數。但由於Stringfinal類,所以沒有這樣的類來擴展它。

因此警告。

正如Andy所說,省略類型變量應該排除警告。

+0

是的,我檢查了,但現在它不編譯,請檢查我更新的問題 –