Java8-Optional类-ofNullable与orElseThrow

本文介绍了Java中的Optional类,它用于处理可能为null的对象,避免空指针异常。Optional提供了ofNullable、orElseThrow等方法来优雅地处理空值情况。通过一个实例展示了如何在代码中使用Optional.ofNullable()方法,当对象为空时抛出自定义异常。
摘要由CSDN通过智能技术生成

一 Optional

1.Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。

2.Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。

3.Optional 类的引入很好的解决空指针异常。

1.ofNullable

如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。

public static <T> Optional<T> ofNullable(T value) {
   return value == null ? empty() : of(value);
}
2.orElseThrow

如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常

public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
    if (value != null) {
        return value;
    } else {
        throw exceptionSupplier.get();
    }
}
3.实例
/**
* @Author yqq
* @Date 2021/4/15 21:50
* @Version 1.0
*/
public class OfNullableDemo {
   public static void main(String[] args) throws NullException {
       String str=null;
       Optional.ofNullable(str)
               .orElseThrow(() -> new NullException("大连东软信息学院就是棒"));
   }
}
//自定义异常
class NullException extends Exception{
   public NullException(){
   }
   public NullException(String msg){
       super(msg);
   }
}
//Exception in thread "main" yqq.Lambda.Optional.ofNullable.NullException: 大连东软信息学院就是棒
Optional.ofNullable.orElseThrowJavaOptional的两个方法的组合使用。首先,ofNullable方法接受一个值作为参数,如果该值为非空,则返回一个包含该值的Optional对象;如果该值为空,则返回一个空的Optional对象。\[1\]接着,orElseThrow方法是Optional的另一个方法,它接受一个Supplier函数式接口作为参数,当Optional对象为空时,会抛出一个由Supplier函数式接口提供的异常。\[2\] 举个例子,假设有一个Optional对象u,我们可以使用ofNullable方法将其包装起来,然后使用map方法对其进行一些操作,最后使用orElseThrow方法来处理可能出现的异常情况。如果Optional对象u为空,那么orElseThrow方法会抛出一个CommonException异常,异常的信息为"用户不存在!"。\[3\] 总结起来,optional.ofNullable.orElseThrow的作用是将一个可能为空的值包装成Optional对象,并在值为空时抛出一个指定的异常。 #### 引用[.reference_title] - *1* [Java8-Optional-ofNullable与orElseThrow](https://blog.csdn.net/manba_yqq/article/details/115742080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java8 - Optional.ofNullable orElseThrow](https://blog.csdn.net/qq_42764468/article/details/127251186)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Optional orElseThrow 错误: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出...](https://blog.csdn.net/qq22692150/article/details/111031347)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留不住的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值