Image

Imaged_m_ wrote in Imageru_java

Generics

Разбираюсь с дженериками.


Написал метод, позволяющий добавить элемент в коллекцию, лежащую в отображении:
	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>)

Как написать корректно?