gpt4 book ai didi

java - Java 的Optional 上的get() 危险吗?

转载 作者:行者123 更新时间:2023-12-01 06:34:30 24 4
gpt4 key购买 nike

在函数式语言中,通常对可选类型使用模式匹配:

let result = match myOptional with 
| Some x -> x * 2
| None -> 0

这对程序员非常有帮助,因为编译器会检查模式匹配是否完整。

但是,在我见过的Java的Optional示例中,使用了isPresentget:

Integer result;
if (myOptional.isPresent()) {
result = myOptional.get() * 2;
} else {
result = 0;
}

对我来说,这违背了可选的目的。编译器不会进行检查来确保 if 的两个分支都正确实现,并且生成的代码与使用 null 的等效代码相比没有额外的保证。

这种设计选择不利于安全,那么为什么标准库提供 get 函数而不仅仅是 match 呢?

最佳答案

这是通过 the Optional::map method 完成的。你的例子可以写成:

Integer result = myOptional.map(i -> i * 2).orElse(0);

关于get方法,已有a discussion弃用它 - 我不确定是否已经做出决定。

关于java - Java 的Optional 上的get() 危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41550399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com