Java 8 的 Optional 类抛异常

本文我们介绍当Optional类为空时如何抛自定义异常。

Optional.orElseThrow

简单描述,如果Optional值存在,则isPresent方法返回true,然后调用get方法返回该值。否则抛出NoSuchElementException异常。

orElseThrow(Supplier

示例实战

假设我们有一个方法返回可能为空的结果:

public String findNameById(String id) {return id == null ? null : "example-name";
}

现在我们打算两次调用findNameById(String id) 方法,并通过ofNullable(T value)方法包装结果。
Optional 提供了静态工厂方法ofNullable(T value)创建实例,然后我们在调用 orElseThrow方法。

通过测试验证结果:

@Test
public void whenIdIsNull_thenExceptionIsThrown() {assertThrows(InvalidArgumentException.class, () -> Optional.ofNullable(personRepository.findNameById(null)).orElseThrow(InvalidArgumentException::new));
}

上述代码findNameById返回null. 所以orElseThrow方法抛出 InvalidArgumentException 异常。

下面使用非空参数调用该方法,则不会获得InvalidArgumentException 异常。

@Test
public void whenIdIsNonNull_thenNoExceptionIsThrown() {assertAll(() -> Optional.ofNullable(personRepository.findNameById("id")).orElseThrow(RuntimeException::new));
}

总结

本文我们介绍了 Java 8 Optional 如何抛自定义异常。

Java 8 的 Optional 类抛异常相关推荐

  1. java基础之Object类和异常

    Object类和异常 1. Object类是所有类的父类(超类, 基类,上帝类); 里面有两个常用的方法: 1> public String toString();// 默认输出对象的地址值的字 ...

  2. java 代码段 执行超时 抛异常_Java 并发队列详解TransferQueue、BlockingQueue、BlockingDeque

    阻塞队列 BlockingQueue java.util.concurrent 包里的 BlockingQueue 接口表示一个线程安放入和提取实例的队列. BlockingQueue 用法 Bloc ...

  3. java打印的globa类l_Spring异常集中处理和日志集中打印

    使用@ControllerAdvice和@ExceptionHandler处理Controller层的异常: @ControllerAdvice public class GlobalExceptio ...

  4. java enhancer_执行trace命令抛异常,Enhancer error,java.lang.ClassFormatError: null

    我也有同样的问题. arthas version 3.4.5 腾讯云环境:CentOS Linux release 7.9.2009 (Core) java version "1.8.0_2 ...

  5. 如何正确的使用Java8中的Optional类来消除代码中的null检查

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:一书生VOID lw900925.github.io/jav ...

  6. flatmap 与map 的区别 java_map和flatmap的区别+理解、学习与使用 Java 中的 Optional

    orElse() 和 orElseGet()的不同之处 乍一看,这两种方法似乎起着同样的作用.然而事实并非如此.我们创建一些示例来突出二者行为上的异同. 我们先来看看对象为空时他们的行为: @Test ...

  7. 使用Optional类来消除代码中的null检查

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨一书生VOID lw900925.github ...

  8. 使用Java8中的Optional类来消除代码中的null检查

      作者:一书生VOID lw900925.github.io/java/java8-optional.html Optional类是Java 8新增的一个类,用以解决程序中常见的NullPointe ...

  9. Java 8 Optional 类

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

最新文章

  1. 产生所有排列---旋转法------2013年1月22日
  2. 特斯拉炫技现场:电驴、行人、快递车,中国的小路难不倒Autopilot自动驾驶
  3. 一天搞定CSS: 清除浮动(float)--13
  4. Android -- 带你从源码角度领悟Dagger2入门到放弃(一)
  5. android p wifi一直在扫描_在Android上的每次WiFi扫描之间我应该使用什么时间间隔?...
  6. 如何在Go中使用切片容量和长度
  7. showModalDialog模态对话框的使用以及浏览器兼容
  8. Pandas 的轴向连接 concat
  9. 对抗生成网络(Generative Adversarial Network, GAN)
  10. 一位辅导员写给毕业生的一封信
  11. 安卓下使用TTS语音包:小爱
  12. 3dmax中如何设置环境灯光
  13. 怎样压缩图片大小到20k?教你一键压缩图片大小
  14. 2018杭州云栖大会参会总结
  15. 支付宝php40247,支付宝APP支付 显示 系统繁忙 请稍后再试 ALI40247
  16. 【Pandas】根据某列分组求和
  17. i5 10400f和i5 11400f参数对比 哪个更好
  18. 在地址栏上输入一个url,到这个页面呈现出来,中间会发生什么?
  19. MySQL安装 忘记密码
  20. 2022年四川省安管人员报名即将结束!C证报名11月9日截止!

热门文章

  1. [NOIP2011 普及组] 瑞士轮
  2. HDOJ 2112 HDU Today (最短路 Dijkstra SPFA)
  3. 22个免费的图表、流程图工具
  4. ESP8266模块三种低功耗睡眠模式
  5. MYSQL补充SQL语句
  6. c语言 输出音频 单片机,单片机播放WAV格式音频的理解
  7. 4 位硬科技创始人对谈 DevOps 硬件实战
  8. 《Python程序设计》python常用的格式转换
  9. kaprekar常数(6174猜想)
  10. Pygame - Python游戏编程入门(3)