避免程序中的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
我们曾如此渴望生命的波澜,到后来才发现,人生最曼妙的风景是内心的淡定与从容