您的位置:首页 > 健康 > 美食 > JAVA 中的Optional类详解

JAVA 中的Optional类详解

2024/10/30 13:25:57 来源:https://blog.csdn.net/NiNg_1_234/article/details/142011068  浏览:    关键词:JAVA 中的Optional类详解

JAVA 中的Optional类详解

一、引言

Java 8 引入了 Optional 类,旨在提供一种更优雅的方式来处理可能为 null 的情况,从而避免 NullPointerExceptionOptional 是一个容器对象,它可能包含也可能不包含非空值。使用 Optional 可以显著减少代码中的 null 检查,使代码更加简洁和安全。

二、Optional 类的基本概念

1、创建 Optional 实例

Optional 类提供了多种创建实例的方法:

  • empty():创建一个空的 Optional 实例。
  • of(T value):创建一个包含非空值的 Optional 实例。如果传入 null,会抛出 NullPointerException
  • ofNullable(T value):创建一个可能包含 nullOptional 实例。
1.1、示例代码
Optional<String> empty = Optional.empty(); // 空实例
Optional<String> name1 = Optional.of("ning"); // 非空实例
Optional<String> name2 = Optional.ofNullable(null); // 空实例

2、访问 Optional 中的值

  • get():如果 Optional 非空,返回值,否则抛出 NoSuchElementException
  • isPresent():检查 Optional 是否包含非空值。
  • ifPresent(Consumer<? super T> consumer):如果 Optional 非空,执行给定的 consumer
2.1、示例代码
Optional<String> name = Optional.of("ning");
if (name.isPresent()) {System.out.println("Name: " + name.get());
}name.ifPresent(System.out::println); // 打印 "ning"

三、Optional 类的高级用法

1、orElse 和 orElseGet

  • orElse(T other):如果 Optional 非空,返回值,否则返回指定的默认值。
  • orElseGet(Supplier<? extends T> other):如果 Optional 非空,返回值,否则返回由 Supplier 函数提供的值。
1.1、示例代码
Optional<String> name = Optional.ofNullable(null);
String defaultName = name.orElse("Default Name"); // 使用默认值
String lazyName = name.orElseGet(() -> "Lazy " + "Name"); // 延迟计算默认值

2、异常处理

  • orElseThrow(Supplier<? extends X> exceptionSupplier):如果 Optional 非空,返回值,否则抛出由 Supplier 函数提供的异常。
2.1、示例代码
Optional<String> name = Optional.ofNullable(null);
name.orElseThrow(() -> new IllegalArgumentException("Name cannot be null"));

四、总结

Optional 类是 Java 8 引入的一个非常有用的特性,它提供了一种更安全、更优雅的方式来处理可能为 null 的情况。通过使用 Optional,我们可以减少代码中的 null 检查,使代码更加简洁和易于维护。同时,Optional 类还提供了丰富的方法,如 orElseorElseGetorElseThrow,使得在不同场景下处理 Optional 变得更加灵活。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • JAVA 中的Optional类理解、学习与使用
  • Java 8 Optional 类

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com