Class Dict{
public static final HashMap<String,Integer> dict=new HashMap<>();
static{
dict.put("xxxx",1);
dict.put("yyyy",2);
}
}
Class Service{
int function(){
return Dict.dict.get("zzzz");
}
}
如上代码,看日志的时候提示,return Dict.dict.get("zzzz");这一行空指针异常。
乍一看,Dict是类,不会为空,dict在类加载的时候也会初始化,也不会为空,那到底哪里会为空呢?
这里有一个很隐秘的类型转换,get出来的类型是包装类Integer,而由于zzzz并不在map中,所以get的结果是null,而函数返回类型是int原始类型,需要拆箱转换,所以才会报空指针异常。
那么应该怎么处理这个问题呢? 这就要根据具体业务来处理了。
- 可以提供兜底的默认值
- 修改函数返回Integer,让上层去处理空的场景
- 直接function内部抛异常,交给上层处理