我有一个采用Map<Integer, Set<Object>>
as 参数的方法。我需要从两个不同的位置调用它,使用 aMap<Integer, Set<String>>
和 aMap<Integer, Set<Integer>>
作为参数。
编译器投诉所以我将方法参数签名更改为Map<Integer, ?>
,现在我可以调用它,但是有不同的问题。方法基本如下:
private void methodA (Map<Integer, ?> inOutMap, Integer key, Object value) {
Set<Object> list = new HashSet<Object>();
if (!inOutMap.containsKey(key)) {
list.add(value);
} else {
list = (Set<Object>) (Set<?>) inOutMap.get(key); //I wrote the cast, but looks quite ugly
list.add(value);
}
inOutMap.put(key, list); //compiler error
//The method put(Integer, capture#4-of ?) in the type Map<Integer,capture#4-of ?> is not applicable for the arguments (Integer, Set<Object>)
}
有没有办法解决编译器错误?也就是说,投射list
到?
.
我的第二个问题是概念性的。除了编写具有不同参数签名的两种不同方法之外,还有什么更好的方法吗?