是时候啦!用Optional取代null!
1.Optional介绍
Optional是Jdk1.8提供的一个新类,希望可以通过该类的引入解决令人烦躁的null判断问题,非常好用。
该类有点类似于包装类,将要操作的Java类封装到该类的对象里面,同时将一些常用的判断逻辑封装为成员方法,结合lambda语法,实现比较优雅的链式调用。
- 构建API:构建一个Optional对象;方法有:
empty()
、of()
、ofNullable()
- 获取API:获取Optional对象里包装的值;方法有:
get()
、orElse()
、orElseGet()
、orElseThrow()
- 转换API:将Optional对象里包装的值转换成一个新的值;方法有:
map()
、flatMap()
- 判断API:对Optional对象里包装的值做一些逻辑判断;方法有:
filter()
、isPresent()
、ifPresent()
2.构建类
简单准备一个Java类
package com.hanpang.model;
import lombok.*;
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class User {
private String username;
private String sex;
private Integer age;
}
复制代码
创建Optional对象方式:
@Test
public void buildOptionalTest(){
// 1.构建一个value为null的optional对象;
Optional<User> userEmptyOpt = Optional.empty();//“空”Optional对象
// 2.构建一个value不可以为null的optional对象,如果of()的入参为null会报空指针异常;
//Optional<User> userNullOpt = Optional.of(null);//运行报NullPointerException,不用调用属性的时候才报错
Optional<User> userOpt = Optional.of(new User("唐僧","男",18));
// 3.构建一个value可以为null的optional对象
Optional<User> userNullOpt = Optional.ofNullable(null);
System.out.println("Optional 空对象");
System.out.println(userEmptyOpt);
System.out.println("Optional of对象必须存在,不然空指针异常");
System.out.println(userOpt);
System.out.println("Optional ofNullable,不存在返回empty()");
System.out.println(userNullOpt);
}
复制代码
Optional 空对象
Optional.empty
Optional of 对象必须存在,不然空指针异常
Optional[User(username=唐僧, sex=男, age=18)]
Optional ofNullable,不存在返回empty()
Optional.empty
复制代码
3.获取类
@Test
public void getOptionalTest(){
Optional<User> userEmptyOpt = Optional.empty();
Optional<User> userOpt = Optional.of(new User(<