Если я понимаю ваш вопрос, вы спрашиваете, как поддержать интерфейс с существующим классом Java, таким как HashMap.
Вам нужно будет создать собственную реализацию, которая реализует ваш интерфейс и расширяет HashMap.
Методы интерфейса делегируют действие HashMap. Таким образом, ваш пользовательский класс будет отвечать потребностям интерфейса для любого метода с подписью вашего интерфейса.
Рабочий пример, который я собрал вместе, чтобы продемонстрировать, как сделать то, что вы просите, с помощью Generics:
Интерфейс кэша:
package interfaces;
public interface Cache<K,V> {
V get(K key);
V put(K key, V value);
void clear();
}
Реализация:
package classes;
import java.util.HashMap;
import interfaces.Cache;
public class MyCache<K,V> extends HashMap<K,V> implements Cache<K,V> {
private static final long serialVersionUID = 1L;
@Override
public V get(Object key) {
return super.get(key);
}
@Override
public V put(K key, V value) {
return super.put(key, value);
}
@Override
public void clear() {
super.clear();
}
}
Затем вы можете использовать его так:
import classes.MyCache;
import interfaces.Cache;
public class DoStuff {
private Cache<String,Integer> cache;
public void initCache() {
//This works
//Since MyCache implements Cache
MyCache<String,Integer> mCache=new MyCache<String,Integer>();
setCache(mCache);
//This will not
//Since HashMap does not implement Cache
HashMap<String,Integer> mMap=new HashMap<String,Integer>();
setCache(mMap);
}
public void setCache(Cache<String,Integer> c) {
cache=c;
}
public Cache<String,Integer> getCache() {
return cache;
}
}