java 解决空指针的方案-optional
在java的编码中我们会经常遇到空指针的情况,为了解决空指针问题,我们经常需要使用if进行判断处理,我们代码中应该是我们的业务代码,而不是大量的对于空指针的校验代码。为了解决这个问题,在jdk 8 的版本中,官方为我们提供了Optional
这个类的用来解决空指针的问题。
Optional 方法学习
Optional 有一个私有的final属性 value
用来保存需要进行判断的实例对象。
构造方法
有一个无参构造方法,和一个有参构造方法,两个构造方法都是私有的,提供了静态方法来获得实例对象。
empty 方法
用来获取一个默认的,value
为空的实例对象
1 |
|
of 方法
这个方法没做其他工作,就是调用了有参构造方法,感觉主要是内部使用,我们工作中调用不多
1 | public static <T> Optional<T> of(T value) { |
ofNullable 方法
如果传入的是一个null对象,就返回默认的空实例对象,否则就调用上面的of
方法。我们主要调用这个
1 | public static <T> Optional<T> ofNullable(T value) { |
常用方法
get
用来获取我们传入的实例对象,如果是一个null,会抛出异常。
isPresent
判断我们传入的是否是一个null
ifPresent
需要传入一个Consumer
对象,如果value
是null就会调用Consumer
的accept
方法。我们主要会使用该方法
orElse
我们经常会有这样的业务,如果是null,我们需要给一个默认值,这个时候我们就可以使用该方法,这个方法支持传入一个默认值,如果value
是空的,就会返回我们传入的默认值。
1 | public T orElse(T other) { |
还有 map
,filter
等方法
使用场景
我们定义一个Person类,用户演示代码
1 | static class Person { |
获取姓名
用户修改显示的名字,从前段传入到后台,我们使用变量保存传入的值。假设用户没有设置值,后台处理的伪代码如下:
1 | String name = null;//前段传入的值 |
获取姓名2
我们使用Person对象来接收前段传入的姓名,这里我们认为Person的实例对象不为空
1 | Person p = new Person(); |