Ваш код скомпилируется, если вы добавите еще один <K,V>
в методы:
public interface CacheMapFactory {
public <K,V> Map<K,V> createCacheMap(String tag, Class<K> kClass, Class<V> vClass);
}
public class InMemoryCacheMapFactory implements CacheMapFactory {
public <K,V> Map<K,V> createCacheMap(String tag, Class<K> kClass, Class<V> vClass) {
return new HashMap<K,V>();
}
}
Я не уверен, что будет делать tag
, но я думаю, что это часть дальнейшей реализации.
Кроме того, вы можете рассчитывать на вывод типа, например:
public interface CacheMapFactory {
public <K,V> Map<K,V> createCacheMap(String tag );
}
public class InMemoryCacheMapFactory implements CacheMapFactory {
public <K,V> Map<K,V> createCacheMap(String tag ) {
return new HashMap<K,V>();
}
}
public class Test {
public void test() {
CacheMapFactory f = new InMemoryCacheMapFactory();
Map<String, Long> m = f.createCacheMap( "mytag" ); //K and V are inferred from the assignment
}
}