前言
Android中考虑多态,很多接口的释放会涉及装箱、拆箱,使用中我们是否考虑过如何保证装箱、拆箱过程中数据的一一对应,比如:
int i = 10;
Object o = i;
int rst = (int)o;
如果我们执行:String b = (String)o,会抛出NumberFormatException。这是为什么呢?
1 装箱、拆箱过程
当我们执行Intger o = i时,实际调用的是Object o = (Object)Integer.valueOf(i); Object中对应的数据类型value为int;
当我们执行int rst = (int)o时,实际调用的是int rst = ((Integer)o).intValue(); intValue返回value
所以如果拆箱时如果目标数据类型与装箱时不匹配,那value类型不对,会抛出NumberFormatException
2 使用中除了catch NumberFormatException保护外我们还可以怎么做?
在拆箱前判断if(o.instanceOf(Integer))即可!由其时涉及进程间通信时,在非透明状态下,这层保护尤为重要!!!