我喜歡有一個java.util.Map,它包含不同的通用類對象。在我的辦案像這樣:具有各種通用類對象的java.util.Map
public interface Handler<s>{
public void encode (S data, OutputStream out);
public S decode (InputStream in, long length);
}
我已經實現類,如:
public class SpecializedHandler implements Handler<FirstSpecialItem>{
public void encode (SpecialItem data, OutputStream out){
// do something
}
public SpecialItem decode(InputStream in, long length){
// do something
}
}
和實現處理程序的類。
對於FirstSpecialItem和SecondSpecialItem存在父類 AbstractSpecialItem。
因爲我有很多的使用編碼和解碼已經問題,我結束了以下地圖,這使得使用解碼和編碼如下:
Map<Long, Handler<? super AbstractSpecialItem>> handlers;
// I can use it as follows
AbstractSpecialItem item = new FirstSpecializedItem();
handlers.get(1L).encode(item,System.out);
AbstractSpecialItem returnVal = handlers.get(1L).decode(System.in, 100L);
但是,我不能創建通過添加不同的Handler實現,如:
SpecializedHandler a = new SpecializedHandler();
SpecializedSecondHandler b = new SpecializedSecondHandler();
Map<Long, Handler<? super AbstractSpecialItem>> handlers = new HashMap<Long,Handler<? super AbstractSpecialItem>>();
handlers.put(0L, a); // does not work
handlers.put(1L, b); // does not work
Eclipse總是說這些值不適用於Map。 我認爲這種行爲是有效的,並試圖更好地理解泛型和PECS原則(通過網頁和一些書籍瀏覽)。但我仍然不明白,想出一個解決方案。在那裏我有Handler類與他們的特殊泛型類型,並能夠使用方法(編碼,解碼),以及創建一個處理程序的地圖。
用'地圖嘗試>'。 –
2014-08-31 18:18:38