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

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -