我正在尝试修改自定义缓存实现,以便在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());
}
}
}
答案 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>
并为每个条目保存一个类标记,以便在需要时知道运行时类型。