2012-01-29 73 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