Generic 0 cannot be cast to java.lang.Short -
i have 2 maps in class (i new generics)
private map<integer, integer> amap = new concurrenthashmap<integer, integer>(); private map<integer, short> bmap = new hashmap<integer, short>();
if key not exist in map want 0 value. have made wrapper method minimize typing 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); }
i call like
integer = getvalue(amap, 15); //okay in case short b = getvalue(bmap, 15); //15 key not exist
for second case gives me:
classcastexception: java.lang.integer cannot cast java.lang.short
so need : new number(0)
, number abstract.
how can fix it?
edit:
my idea arithmetic operations without additional ifs:
integer = getvalue(amap, 15); = + 10;
one way supply default value argument function:
private <t extends number> t getvalue (map<integer, t> map, integer key, t dflt) { return (t) ((map.containskey(key)) ? map.get(key) : dflt); } public static void main(string[] args) { integer = getvalue(amap, 15, 0); //okay in case short b = getvalue(bmap, 15, (short)0); //15 key not exist }
Comments
Post a Comment