Java包装类拆箱引发的空指针异常

69 阅读1分钟
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原始类型,需要拆箱转换,所以才会报空指针异常。

那么应该怎么处理这个问题呢? 这就要根据具体业务来处理了。

  1. 可以提供兜底的默认值
  2. 修改函数返回Integer,让上层去处理空的场景
  3. 直接function内部抛异常,交给上层处理