Defining a generic class which implements a generic interface
我有要求在哪里定义实现
这是我的自定义地图界面:
1 2 3 4 5 6 | public interface ICache<K, T> { boolean containsKey(K k); T getValue (K key); void remove(K key); void put(K k, T t); } |
这是自定义类的实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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); } } |
但是当我尝试构建Cache时,会收到类似" Cache是??原始类型的警告。应该对通用类型Cache的引用进行参数设置" ...
创建自定义地图的示例方法。
1 2 3 4 5 6 | public ICache<?, ?> lookupCache(String cacheName) { ICache<?, ?> cache = null; Cache<?, ?> jCache = new DefaultCacheManager().getCache(); cache = new CustomCache(jCache); return cache; } |
避免这种情况的一种方法就是简单地使用@SuppressWarnings,但是我可以使用泛型来解决该问题。
尽管使用<>运算符可以解决此问题,但我也需要使其与1.6兼容。
我会将其实现为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class Cache<K, T> implements ICache<K, T> { Map<K, T> map = new HashMap<K, T>(); @Override public boolean containsKey(K k) { return map.containsKey(k); } @Override public T getValue(K key) { return map.get(key); } @Override public void remove(K key) { map.remove(key); } @Override public void put(K k, T t) { map.put(k, t); } } |
作为适配器模式
无需尝试,我认为您可以使用通用的辅助方法解决以下情况:
1 2 3 | private <K, T> ICache<K, T> createCache)(org.infinispan.Cache<K, T> cache){ return new CustomCache<K, T>(cache); } |
警告几乎可以概括为:类
1 |
它基本上说您有一个