Optional
简介
Optional是一个容器对象,可以包含也可以不包含非null值。Optional在Java 8中引入,目的是解决 NullPointerExceptions的问题。本质上,Optional是一个包装器类,其中包含对其他对象的引用。在这种情况下,对象只是指向内存位置的指针,并且也可以指向任何内容。从其它角度看,Optional提供一种类型级解决方案来表示可选值而不是空引用。
创建
//声明空的Optional
Optional<String> opt1 = Optional.empty();
//非空值创建Optional
//如果入参是一个null,这段代码会立即抛出一个NullPointerException,而不是等到你
//试图访问Optional的值时才返回一个错误。
Optional<String> opt2 = Optional.of("str");
//可接受null的Optional
Optional<String> opt3 = Optional.ofNullable("str");
常用API
方法 | 解释 | |
---|---|---|
get() | 这些方法中最简单但又最不安全的方法。如果变量存在,它直接返回封装的变量 值,否则就抛出一NoSuchElementException异常。所以,除非你非常确定Optional 变量一定包含值,否则使用这个方法是个相当糟糕的主意。此外,这种方式即便相对于 嵌套式的null检查,也并未体现出多大的改进。 | |
orElse(T other) | 允许你在 Optional对象不包含值时提供一个默认值。 | |
orElseGet(Supplier<? extends T> other) | 是orElse方法的延迟调用版,Supplier 方法只有在Optional对象不含值时才执行调用。如果创建默认值是件耗时费力的工作, 你应该考虑采用这种方式(借此提升程序的性能),或者你需要非常确定某个方法仅在 Optional为空时才进行调用,也可以考虑该方式(这种情况有严格的限制条件)。 | |
orElseThrow(Supplier<? extends X> exceptionSupplier) | 和get方法非常类似, 它们遭遇Optional对象为空时都会抛出一个异常,但是使用orElseThrow你可以定制希望抛出的异常类型。 | |
ifPresent(Consumer<? super T> consumer) | 让你能在变量值存在时执行一个作为参数传入的方法,否则就不进行任何操作。 | |
filter(Predicate<? super T> predicate) | 剔除特定的值 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!