2014-12-27 108 views
2

我正在使用memcache(Google App Engine)並使用getAll()在批處理中檢索多個緩存條目。我的緩存條目是:在地圖中投射值

private Map<String, Set<Long>> cacheEntries; // key: String, value: Set<Long> 

GETALL()返回對象的值(因爲它不知道我已經緩存在組以前),這裏是簽名:

<T> java.util.Map<T,java.lang.Object> getAll(java.util.Collection<T> collection); 

在我的代碼去:

cacheEntries = cache.getAll(keys); // cache is the MemcacheService, keys is a Collection of String 

這明顯失敗,因爲返回和預期的集合。於是,我就投的地圖是這樣的:

cacheEntries = (Map<String, Set<Long>>) cache.getAll(keys); 

但是編譯器告訴我

Incompatible types, cannot cast Map<String, Object> to Map<String, Set<Long> 

很清楚爲什麼:我想投全地圖,而我真的需要轉換價值在每個地圖條目中。

當然,我可以解決這個迭代遍歷地圖和單獨鑄造每個值,但我想知道是否有更好的方法來實現這一點。

回答

2

你可以將它轉換爲原始Map鑄造Map<String, Set<Long>>前:

cacheEntries = (Map<String, Set<Long>>)(Map)cache.getAll(keys); 

你也可以使用Map<String, ?>如果你不想原始類型的警告。