Java 在自定义LinkedHashMap缓存类中使用泛型

Java 在自定义LinkedHashMap缓存类中使用泛型,java,Java,我正在尝试查看是否修改自定义缓存实现以在LinkedHashMap中使用泛型,而不是LinkedHashMap。我认为是合适的,但最佳实践是什么?泛型的使用有意义吗 public class Cache extends LinkedHashMap<Object, Object>{ private static final long serialVersionUID = -4297992703249995219L; private final int cacheSize

我正在尝试查看是否修改自定义缓存实现以在
LinkedHashMap
中使用泛型,而不是
LinkedHashMap
。我认为
是合适的,但最佳实践是什么?泛型的使用有意义吗

public class Cache extends LinkedHashMap<Object, Object>{
    private static final long serialVersionUID = -4297992703249995219L;
    private final int cacheSize;
    public Cache(int size){
        super(size + 1, .75f, true); 
        this.cacheSize=size;
    }

     protected boolean removeEldestEntry(Map.Entry<Object, Object> eldest) {
        return size() > cacheSize;
     }
}

public class Main {
    public static void main(String[] args) {
        Cache cache = new Cache(2);
        cache.put(1, "one");
        cache.put(2, "two");

        for(Entry<Object, Object> entry : cache.entrySet()){
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}
公共类缓存扩展LinkedHashMap{
私有静态最终长serialVersionUID=-4297992703249595219L;
私有最终整数缓存大小;
公共缓存(整数大小){
超级(尺寸+1.75f,真实);
这个.cacheSize=size;
}
受保护的布尔重构(Map.Entry最早){
返回size()>cacheSize;
}
}
公共班机{
公共静态void main(字符串[]args){
缓存=新缓存(2);
cache.put(1,“一”);
cache.put(2,“2”);
for(条目:cache.entrySet()){
System.out.println(entry.getKey()+“:”+entry.getValue());
}
}
}

如果您希望
缓存
类也是泛型的,请将其声明为:

public class Cache<K,V> extends LinkedHashMap<K,V>{

然后,这扩展了Java通用系统的功能。您需要使用
并为每个条目保存一个类标记,以便在需要时知道运行时类型。

您应该将强制转换设置为泛型。@SLaks-我尝试此操作时无法将其编译…此代码段中的强制转换在哪里?我已经添加了一个使用带泛型的缓存对象的java主示例,这样合适吗?与Entry相比,Entry有什么好处?为什么需要泛型?
Cache
是否只存储
Entry
?这会对for(条目)产生什么影响…我尝试了条目,但它无法编译。有什么想法吗?
仅在
缓存
类中有意义。在
主程序中,您必须指定实际的类。在您的情况下,它将是
Entry
Cache<Integer,String> cache = new Cache<>();
...
cache.put(1,"String 1");
cache.put(2,"String 2");
cache.put(1,"String 1");
cache.put(new MyObject1(), new SomeOtherObject());