クラスに 2 つのマップがあります (ジェネリックは初めてです)
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
2番目のケースでは、次のようになります。
ClassCastException: java.lang.Integer cannot be cast to java.lang.Short
したがって、おそらく のようなことをする必要があります: new Number(0)
が、 Number は抽象的です。
どうすれば修正できますか?
編集:
私の考えは、追加のifなしで算術演算を行うことです:
Integer a = getValue(aMap, 15);
a = a + 10;