我班上有两张地图(我是泛型新手)
private Map<Integer, Integer> aMap = new ConcurrentHashMap<Integer, Integer>();
private Map<Integer, Short> bMap = new HashMap<Integer, Short>();
如果地图中不存在键,我想获得一个零值。所以我做了这个包装方法来最小化打字containsKey(key)
@SuppressWarnings("unchecked")
private <T extends Number> T getValue (Map<Integer, T> map, Integer key) {
return (T) ((map.containsKey(key)) ? map.get(key) : 0);
}
我称之为
Integer a = getValue(aMap, 15); //okay in any case
Short b = getValue(bMap, 15); //15 key does not exist
对于第二种情况,它给了我:
ClassCastException: java.lang.Integer cannot be cast to java.lang.Short
所以可能我需要做类似的事情: new Number(0)
,但 Number 是抽象的。
我该如何解决?
编辑:
我的想法是在没有额外 if 的情况下进行算术运算:
Integer a = getValue(aMap, 15);
a = a + 10;