想写个方法,用来偷懒,结果写了一半写不下去了,一定是泛型的打开方式不对。。。
已知:经常需要用Map<String,Integer>,Map<String,Long>,......这种key固定为String,value为Number子类(基本数值类型的包装类) 的map做 加 操作。
于是,想写个通用的addKey方法,传入map,key,value ,对于map中没有的key,直接put进去<k,v> ,对于key已经存在的,取value进行加操作。
然后,就写出了这个:
else里 不知道咋写了。。。
貌似问题是: 代码阶段,value进行加操作之后类型必须还是 'T' ,但是我不知道该怎么搞了。
我想了两种其他方法,大概可行,不过感觉比较麻烦,效率也不高
一:定义个接口 Addable<T> 包含一个 add(T t)。
然后针对每个数值包装类写个My*** implements Addable<My***> 。
然后方法改成 <T extends Addable> Map<String, T> addKey(Map<String, T> map, String key, T t)。
感觉上可以实现,不过Map只能定义为Map<String,My***>这种了,用起来有点不太方便,取value值的时候需要用get方法,不能在My***的阶段自动“装箱,拆箱”。
二:直接 Map<String,Object> addKey(Map<String,Object> map,String key,Object v)();
这样就不存在没法put的情况了,但是在加操作和 取value的时候需要判断class类型,很蛋疼的赶脚。。。
求支招,求解惑
已知:经常需要用Map<String,Integer>,Map<String,Long>,......这种key固定为String,value为Number子类(基本数值类型的包装类) 的map做 加 操作。
于是,想写个通用的addKey方法,传入map,key,value ,对于map中没有的key,直接put进去<k,v> ,对于key已经存在的,取value进行加操作。
然后,就写出了这个:
else里 不知道咋写了。。。
貌似问题是: 代码阶段,value进行加操作之后类型必须还是 'T' ,但是我不知道该怎么搞了。
我想了两种其他方法,大概可行,不过感觉比较麻烦,效率也不高
一:定义个接口 Addable<T> 包含一个 add(T t)。
然后针对每个数值包装类写个My*** implements Addable<My***> 。
然后方法改成 <T extends Addable> Map<String, T> addKey(Map<String, T> map, String key, T t)。
感觉上可以实现,不过Map只能定义为Map<String,My***>这种了,用起来有点不太方便,取value值的时候需要用get方法,不能在My***的阶段自动“装箱,拆箱”。
二:直接 Map<String,Object> addKey(Map<String,Object> map,String key,Object v)();
这样就不存在没法put的情况了,但是在加操作和 取value的时候需要判断class类型,很蛋疼的赶脚。。。
求支招,求解惑