避免程序中的NPE

方式一:

equals方法

public void equals() {
    //代表未知的对象,可能会是NULL也可能不是NULL
    Object unKnowObject = null;
    //这样某些情况下可能会抛出NULLPointException
    System.out.println(unKnowObject.equals("str"));
    //改成如下
    //str一定不会空,所以不会抛出异常
    System.out.println("str".equals(unKnowObject));
}

方式二:valueOf与toString;通过String.valueOf来避免

public void toMyString() {
    BigDecimal bigDecimal = null;
    //避免如下写法,当对象为空时候会抛出异常
    System.out.println(bigDecimal.toString());
    //使用String静态方法
    System.out.println(String.valueOf(bigDecimal));
}

方式三:元素的list避免null

从数据库中检索数据如果结果集为空,利用0元素的list或者set来避免返回null

public void retrieveDataFromDB() {
    //如果没有检索到数据,返回0元素的list,map,set而不是null
    List result = Collections.EMPTY_LIST;
}

  

方式四:JDK8以后可以使用Optional

初始化Optional有两种方法 
1. of: of函数传入的参数不允许为null,否则抛出NullPointerException 
2. ofNullable: ofNullable允许参数为空,创建一个不包含任何值得Optional值实例

Optional<String> name = Optional.of("wenruo");
Optional<String> nullableName = Optional.ofNullable(null);

取数据时可以先isPresient判断是否有具体的数据,然后再get,不过get时候如果Optional没有数据就会抛异常

//isPresent函数有具体值得情况下返回true
if (name.isPresent()) {
    System.out.println(name.get());
}
//如果对空类型调用get会抛出异常
System.out.println(nullableName.get());

 更多Optional请参考:https://www.cnblogs.com/code-sayhi/articles/9621792.html

posted @ 2018-09-10 16:56  zlAdmin  阅读(382)  评论(0)    收藏  举报