【发布时间】:2016-11-02 02:18:41
【问题描述】:
我正在尝试编写一个通用函数,它将一个元素添加到Collections 的Map。这适用于Map 的Lists:
public static <TKey, TVal> void addToMapOfLists(Map<TKey, List<TVal>> map, TKey key, TVal val) {
List<TVal> list = map.get(key);
if (list == null) {
list = new ArrayList<>();
list.add(val);
map.put(key, list);
} else
list.add(val);
}
我想让这个函数在Map<TKey, Set<TVal>> 和Map<TKey, List<TVal>> 上工作。我希望这应该是可能的,因为两者都实现了Collection,它具有我调用的add(TVal) 成员。
我的问题是,当我尝试将参数 Map<TKey, List<TVal>> map 更改为 Map<TKey, ? extends Collection<TVal>> map - 我需要以某种方式将 new ArrayList<>(); 替换为对 Collection 实现者的构造函数的调用。
【问题讨论】:
-
您是如何选择使用 List 或 Set 的?通过 java 中的反射,您在运行时找不到参数 Map 的泛型类型。
-
显然(来自 C++)- 根据地图类型选择列表或集合。两者都调用了默认 ctor。
-
@AnkitTripathi,我在问这个问题之前看过这个问题。该问题询问有关定义新类型的问题,并且询问有关添加到现有地图的问题。答案对这个问题也不是很有用。
标签: java generics dictionary collections