我要求我在哪里定义实现generic class
的{{1}}。
这是我的自定义地图界面:
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);
}
但是当我尝试构建一个Cache时,我收到警告,例如“Cache是一个原始类型。对泛型类型Cache的引用应该参数化”......
创建自定义地图的示例方法。
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);
}
}
避免这种情况的一种方法就是使用@SuppressWarnings,但是我可以使用泛型来修复它。
使用&lt;&gt;运营商虽然解决了这个问题,但我也需要兼容1.6。
答案 0 :(得分:2)
我会将其实现为
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 :(得分:1)
警告几乎总结了一下:您的类Cache
是泛型类型,这意味着它需要类型参数,但您对Cache
对象jCache
的引用不具备这种类型参数。您不仅应该在声明中提供它们,还应该在初始化中提供它们,如下所示:
cache = new CustomCache<Object, Object>(jCache);
它基本上表示您有一个类CustomCache
的对象,但您不知道K
或T
类型(尚未)。你现在可以说的是,你只会在其中放入Object
。
答案 2 :(得分:1)
没有尝试,我认为你可以使用通用的辅助方法解决这样的情况:
private <K, T> ICache<K, T> createCache)(org.infinispan.Cache<K, T> cache){
return new CustomCache<K, T>(cache);
}