2014-02-13 32 views
3

我呼籲SerializableL一個接口,由3個不同的類實現的:演員的ConcurrentHashMap <String, B>到的ConcurrentHashMap <String, A>當B實現

  • 產品
  • 橫幅
  • 標籤

我開始重構,並希望用多個方法調用替換多個段落。

public void load(ConcurrentHashMap<String, SerializableL> map, 
ArrayList<SerializableForL> preparedList) 

我寫了下面的代碼,並得到以下錯誤。

代碼:

ConcurrentHashMap<String, SerializableForL> test = DBStore.Cache.get(tag); 

錯誤:

Type mismatch: cannot convert from ConcurrentHashMap<String,Banner> to 
    ConcurrentHashMap<String,SerializableForL> 

我怎樣才能做一個解決方法嗎?

我想要一種方法來施放(ConcurrentHashMap<String,Banner>ConcurrentHashMap<String,SerializableForL>)。

橫幅是一個SerializableForL。

+0

的錯誤是正確的。出於充分的理由,編譯器不認爲這是安全的操作。如果你知道它不應該是一個問題,你可以使用類型擦除並將其轉換爲'(ConcurrentHashMap)' –

+0

@ Peter Lawrey我該怎麼做? –

+0

'ConcurrentHashMap test =(ConcurrentHashMap)DBStore.Cache.get(tag);' –

回答

4

您不能將Map<String,Banner>分配給Map<String,SerializableForL>even if Banner implements SerializableForL

但是,如果你只關心的值是SerializableForL你應該能夠編寫:

ConcurrentMap<String, ? extends SerializableForL> test = DBStore.Cache.get(tag); 
+1

+1這真是一些黑暗的魔法......有時候像這樣的問題讓我想成爲一個脫衣舞女。 –

相關問題