2014-12-27 80 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, ?>如果你不想原始类型的警告。