У меня есть требование, где я хочу определить 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;
}
Один из способов избежать этого просто использовать, @SuppressWarnings, но я могу исправить то же самое, используя общие.
Использование оператора <>, хотя исправляет это, , но мне нужно сделать его совместимым с 1.6.
Примечание: В Java конвенции, чтобы не использовать «I» -prefix для имен интерфейсов. (AFAIK это соглашение происходит из C-мира.) – Puce
Я уже работаю над рефакторингом. –