Generics
Разбираюсь с дженериками.
Написал метод, позволяющий добавить элемент в коллекцию, лежащую в отображении:
Теперь хочу написать вызывающий его более специальный метод для HashSet:
Но здесь возникает ошибка:
Если сделать так:
Как написать корректно?
Написал метод, позволяющий добавить элемент в коллекцию, лежащую в отображении:
static <K,E,C extends Collection<E>> boolean addToMappedCollection(
Map<K,C> map,
K key, E value,
Class<? extends C> c
)
{
C coll = map.get(key);
if( coll==null ) {
try {
coll = (C)c.newInstance();
} catch (Exception e) {
return false;
}
map.put(key, coll);
}
return coll.add(value);
}
Теперь хочу написать вызывающий его более специальный метод для HashSet:
static <K,E> void addToMappedHashSet(
Map<K, HashSet<E>> map,
K key, E value)
{
addToMappedCollection(map, key, value, HashSet.class);
}
Но здесь возникает ошибка:
The method addToMappedCollection(Map<K,C>, K, E, Class<? extends C>) is not applicable for the arguments (Map<K,HashSet<E>>, K, E, Class<HashSet>). Если сделать так:
static <K,E> void addToMappedHashSet(
Map<K, HashSet> map,
K key, E value)
{
addToMappedCollection(map, key, value, HashSet.class);
}
, то Eclipse даёт предупреждение: Type safety: Unchecked invocation addToMappedCollection(Map<K,HashSet>, K, E, Class<? extends HashSet>) of the generic method addToMappedCollection (Map<K,C>, K, E, Class<? extends C>)Как написать корректно?
