JDK8新属性Optional避免空指针异常
jdk8新属性Optional避免空指针异常
空指针异常或许是我们开发Java时遇到的最多的异常了,这是一个极其普遍又无法根治的问题。
什么时空指针?
当一个变量的值为null时,在Java里表示一个不存在的对象,没有实际内容,没有给他分配内存,null也是对象成员变量的默认值。
Object object = null; String str = object.toString();
如以上代码就会报空指针异常
有很多方法或者平时的代码规范代码整洁可以尽最大可能的避免这种空指针异常,这里主要讲述jdk8的属性Optional来避免空指针和优化代码。提高代码整洁度。
jdk8提供了Optional,一个可以包含null值的容器对象,可以用来代替 xx != null的判断
这里我们新建实体类简单举例:
User.java
private String username; private String sex; private Address address;
Address.java
private String province; private String city; private Street street;
Street.java
private String number;
这里假设我们要获取用户与之对应的number
为了避免user.getAddress().getStreet()的空指针异常,我们可能会这么写:
public String getUserNumber(User user){ if(user != null){ if(user.getAddress() != null){ if(user.getAddress().getStreet() != null){ return user.getAddress().getStreet().getNumber(); } } } return "默认值"; }
引用了Optional之后
public String getUserNumber2(User user){ return Optional.ofNullable(user) .map(u -> u.getAddress()) .map(a -> a.getStreet()) .map(s -> s.getNumber()) .orElse("默认值"); }
可以进行链式的调用,而不是一层一层的判断了,,这个代码就很舒服了,Optional给我们提供了一个优雅简化的java风格来处理空指针异常,
当然,处理空指针异常有很多方法,Optional也不仅这一种用途。