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

时间:2013-07-19 00:41:34

标签: java

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

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());
        }
    }
}

1 个答案:

答案 0 :(得分:2)

如果您希望Cache类也是通用的,请将其声明为:

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

然后你可以声明,例如,

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());

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