我在我的类中有两个地图(我对泛型不太熟悉)
private Map<Integer, Integer> aMap = new ConcurrentHashMap<Integer, Integer>();
private Map<Integer, Short> bMap = new HashMap<Integer, Short>();
如果Map中没有该键(key),我希望得到一个零值。因此,我编写了这个包装方法来减少输入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;