Optional类简单使用
使用前
关于空指针相信大家都不陌生,最近项目开发也是总是有考虑不到的空指针,于是在网上找了些结局方案,然后记录一下。
基本功能
Optional类(java.util.Optional)是一个容器类它可以保存类型T的值,代表这个值存在,或者仅仅保存null,表示这个值不存在。
如果值存在isPresent()方法返回true,调用get()方法会返回该对象。
常用方法
创建Optional对象的方法
1.Optional.of(T t):创建Optional实例的方法,但是t必须非空。
2.Optional.empty():创建一个空的Optional实例
3.Optional.ofNullable(T t) :t可以为null
判断Optional容器中是否包含对象
1.Boolean isPresent():判断是否包含对象
2.void ifPresent(Consumer consumer):如果有值,就执行Consumer接口的实现代码并且该值会作为参数传给consumer
获取容器内的对象
1.T get():如果调用对象包含值,返回该值,否则抛异常
2.T orElse(T other) :如果有值则将其返回,否则返回指定的other对象。
3.T orElseGet(Supplier other) :如果有值则将其返回,否则返回由 Supplier接口实现提供的对象。
4.T orElseThrow(Supplier exceptionSupplier) :如果有值则将其返 回,否则抛出由Supplier接口实现提供的异常。
代码演示
实体类student
/**
* @author hzq
* @date 2022年10月20日 16:03
*/
@Data
public class Student {
private String name ;
private String Id ;
}
测试类-创建Optional测试
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import java.util.Optional;
/**
* @author hzq
* @date 2022年10月20日 15:19
*/
@Slf4j
public class OptionalTest {
/**
* @discription 创建Optional类演示 如图1
* @Return: void
* @Author: hzq
* @Date: 2022/10/20 16:44
*/
@Test
public void testBuilder(){
Student student = new Student();
student.setId("123456");
student.setName("刘晓明");
Optional<Student> student1 = Optional.of(student);
log.info(student1.get().getName());
Optional<Object> empty = Optional.empty();
// log.info("empty value log: {}",empty.get()); //注释1
log.info("empty log: {}",empty);
Optional<Student> student2 = Optional.ofNullable(student);
log.info("student2 log: {}",student2.get());
student = null;
Optional<Object> empty2 = Optional.ofNullable(student);
log.info("empty2 log: {}",empty2);
}
/**
* @discription 判断对象 如图2
* @Return: void
* @Author: hzq
* @Date: 2022/10/20 16:44
*/
@Test
public void testJudge(){
Student student = new Student();
student.setId("123456");
student.setName("刘晓明");
Optional<Student> student1 = Optional.of(student);
log.info("isPresent() :{}",student1.isPresent());
Optional<Object> empty = Optional.empty();
log.info("isPresent() :{}",empty.isPresent());
student1.ifPresent(student2 -> {System.out.println("打印消费");});
empty.ifPresent(empty2 -> {System.out.println("打印消费");});
}
}
** 注意:**
如果把注释1放开会报错
如图二
参考
https://blog.csdn.net/qq_33704186/article/details/108565096tutorial-and-quick-reference