如何正确使用Java泛型? extends Set <integer> </integer>

时间:2012-11-10 03:00:55

标签: java generics

首先,我尝试使用

Map<Integer, Set<Integer>> map = new HashMap<Integer, HashSet<Integer>>();

,但它没有编译,因为没有可用的转换。

然后我试了

Map<Integer, ? extends Set<Integer>> map = new HashMap<Integer, HashSet<Integer>>();

。它似乎工作,但当我试图打电话

map.put(i, new HashSet<Integer>());

,由于不兼容性,结果证明是失败。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

你可以这样做:

Map<Integer, Set<Integer>> map = new HashMap<Integer, Set<Integer>>();
map.put(1, new HashSet<Integer>());

当您从地图中检索该值时,它将是Set<Integer>类型,但根据您的期望,这不会产生任何差异。但是,如果您只想检索HashSet<Integer>,那么您的地图定义应为

Map<Integer, HashSet<Integer>> map = new HashMap<Integer, HashSet<Integer>>();

答案 1 :(得分:1)

你可以这样做:

Map<Integer, Set<Integer>> map = new HashMap<>();