-1

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

1 に答える 1

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>必要なときにランタイム タイプを知ることができるように、各エントリでクラス タグを使用して保存する必要があります。

于 2013-07-19T01:28:17.427 に答える