1、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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值