【发布时间】:2013-03-04 10:26:06
【问题描述】:
我的班级有两张地图(我是泛型新手)
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) 的事情,但数字是抽象的。
我该如何解决?
编辑:
我的想法是在没有额外 if 的情况下进行算术运算:
Integer a = getValue(aMap, 15);
a = a + 10;
【问题讨论】:
-
如果您返回 null 而不是零,则不会出现此问题。无论如何它可能更正确,因为零实际上是一个有效值(除非您说您的地图将永远包含这些)。
标签: java generics map casting bounded-wildcard