2012-01-29 52 views
0

我正在嘗試編寫一個簡單的緩存類。緩存本質上是一個從類到列表的映射。 我想聲明地圖的方式來強制列表項類與鍵的類相同。以下:在地圖上強制執行仿製

class Cache { 
    private static Map<Class<? extends CodedEntity>, List<? extends CodedEntity>> map; 
} 

是不夠的,因爲它不會執行(在其decleration)我想要的。 地圖需要是靜態的,並且將類聲明爲T是沒有意義的,因爲我不希望它僅限於單一類型。有沒有一種語法方式來實現這一點?

回答

4

你的地圖是私人的,你爲什麼不強制執行你在accessor和mutator方法中的需求?

public <T extends CodedEntity> void addToCache(Class<T> key, List<T> values) { 
    map.put(key, values); 
} 

public <T extends CodedEntit> List<T> getFromCache(Class<T> key) { 
    return (List<T>) map.get(key); 
} 
+0

當然,我可以做到這一點(而且我做到了),對我來說,我似乎很奇怪,我無法找到一種方法來在字段級別定義這一點。例如,我希望在return語句中不會有編譯器警告。 – Ran 2012-01-29 18:19:19

+3

對不起 - 這不可行。您的API將是外部類型安全的,但是Java類型系統不夠強大,無法證明「此處投射是安全的」。 – 2012-01-29 18:27:23