Java 在地图上强制使用泛型

Java 在地图上强制使用泛型,java,generics,Java,Generics,我正在尝试编写一个简单的缓存类。缓存本质上是从类到列表的映射。 我想以一种强制列表项类与键的类相同的方式声明映射。以下是: class Cache { private static Map<Class<? extends CodedEntity>, List<? extends CodedEntity>> map; } 类缓存{ 私有静态映射您的映射是私有的,为什么不在访问器和变异器方法中实现您的需求呢 public <T extends Co

我正在尝试编写一个简单的缓存类。缓存本质上是从类到列表的映射。 我想以一种强制列表项类与键的类相同的方式声明映射。以下是:

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

私有静态映射您的映射是私有的,为什么不在访问器和变异器方法中实现您的需求呢

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);
}
public void addToCache(类键,列表值){
map.put(键、值);
}
公共列表getFromCache(类密钥){
返回(列表)映射。获取(键);
}

您的映射是私有的,为什么不在访问器和变异器方法中实现您的需求呢

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);
}
public void addToCache(类键,列表值){
map.put(键、值);
}
公共列表getFromCache(类密钥){
返回(列表)映射。获取(键);
}
我当然能做到(我做到了),我觉得奇怪的是,我找不到在字段级别定义它的方法。例如,我希望在返回语句中不会出现编译器警告。对不起,这是行不通的。您的API在外部是类型安全的,但Java类型系统不够强,无法证明类似的事情“这个演员在这里是安全的。”当然我能做到这一点(我做到了),我觉得奇怪的是,我找不到在字段级别定义它的方法。例如,我希望在返回语句中不会出现编译器警告。对不起,这是行不通的。您的API在外部是类型安全的,但Java类型系统不够强,无法证明以下内容:这里的石膏是安全的。”