Я хотел бы вызвать метод, определенный как
<T> void foo(Class<? extends Collection<T>>)
но компилятор не пропустит
foo(ArrayList<Integer>.class);
Каков синтаксис для получения класса типа универсального типа?
Я реализую общий случай, когда у меня есть
Map<Key, Collection<Value>>
и хотите вставить значение в коллекцию. Если коллекция не существует, она должна создать новую и вставить в нее значение.
Пока у меня есть следующий код, но с предупреждениями безопасности типа:
public static <K, V, C extends Collection<V>> boolean addToMappedCollectionNotNull(Map<K, C> aMap, K key, V element, Class<? extends Collection> type) {
C collection = aMap.get(key);
if (collection == null) {
try {
collection = (C)type.newInstance();
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
}
aMap.put(key, collection);
}
return collection.add(element);
}