当前位置:  开发笔记 > 编程语言 > 正文

Java上的get()是可选的危险吗?

如何解决《Java上的get()是可选的危险吗?》经验,为你挑选了1个好方法。

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

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

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

然而,在Java的例子Optional,我所看到的,isPresent并且get被用来代替:

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

对我来说,这违背了目的Optional.编译器不进行检查以确保if正确实现了它们的两个分支,并且生成的代码没有比使用等效代码更多的保证null.

这种设计选择阻碍了安全性,那么为什么标准库提供的get功能不仅仅是match



1> assylias..:

这是通过该Optional::map方法完成的.你的例子可以写成:

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

关于这个get方法,有一个讨论要弃用它 - 我不确定是否已经达成了一个决定.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有