2

generic classを実装するを定義したいという要件がありますgeneric interface

これは私のカスタム マップ インターフェイスです。

public interface ICache<K, T> {
     boolean containsKey(K k);
     T getValue (K key);
     void remove(K key);
     void put(K k, T t);
}

これはカスタム クラスの実装です。

 public class CustomCache<K, T> implements ICache<K, T> {

    private org.infinispan.Cache<K, T> cache;

    public CustomCache(org.infinispan.Cache<K, T> cache) {
        this.cache = cache;
    }

    @Override
    public boolean containsKey(K k) {
        return cache.containsKey(k);
    }

    @Override
    public T getValue(K key) {
        return cache.get(key);
    }

    @Override
    public void remove(K key) {
        cache.remove(key);
    }

   @Override
   public void put(K k, T t) {
       cache.put(k, t);
   }
}

しかし、キャッシュを構築しようとすると、「キャッシュは生の型です。ジェネリック型キャッシュへの参照はパラメーター化する必要があります」などの警告が表示されます...

カスタム マップを作成するサンプル メソッド。

public ICache<?, ?> lookupCache(String cacheName) {
    ICache<?, ?> cache = null;
    Cache<?, ?> jCache = new DefaultCacheManager().getCache();
    cache = new CustomCache(jCache);
    return cache;
}

これを回避する 1 つの方法は、単に @SuppressWarnings を使用することですが、ジェネリックを使用して同じことを修正できますか。

<> 演算子を使用するとこれは修正されますが、1.6 互換にする必要もあります。

4

3 に答える 3

1

試してみなくても、一般的なヘルパー メソッドを使用して、このような状況を解決できると思います。

private <K, T> ICache<K, T> createCache)(org.infinispan.Cache<K, T> cache){
  return new CustomCache<K, T>(cache);
}
于 2013-04-04T08:32:13.180 に答える