方法:
public static void incrementMapCounter( Map<Object,Number> tabulationMap, Object key ) {
Number value = 0;
if ( tabulationMap.containsKey(key) ) {
value = tabulationMap.get(key);
}
value = value.doubleValue() + new Double(1);
tabulationMap.put( key, value );
}
调用方法:
Map<String,Long> counts = new HashMap<>();
String key = "foo-bar";
incrementMapCounter( counts, key );
错误(重新格式化):
The method
incrementMapCounter(Map<Object,Number>, Object)
in ... is not applicable
for the arguments (Map<String,Long>, String)
方法签名是匹配类型或更通用:
我对这一点感到有点困惑。
答案 0 :(得分:1)
是后两者。字符串和对象的类型不同。泛型不是协变的,它们是不变的。类型必须完全匹配。与Long和Number相同。
对于您的方法签名,您可以尝试:
public static <T> void incrementMapCounter( Map<? extends T, ? extends Number> map, T key )
{ ...
可以通过以下方式调用:
HashMap<String, Integer> myMap = new HashMap<>();
incrementMapCounter( myMap, "warble" );
答案 1 :(得分:0)
泛型是invariant所以参数需要匹配传入的参数,以便可以将值添加到Collection
public static void incrementMapCounter(Map<String, Long> map, Object key) {