1、什么是optional?

试想一下,当你有一个电商系统,然后需要设计一个接口去获取注册的用户的地址的时候,一般这个接口的返回值类型会是string,但是如果你调用这个接口时得到一个返回值为空字符串,你会怎么认为它的含义?是用户设置的就是空字符吗?还是用户没有设置呢?

这种问题一般有种办法可以解决,就是把返回值类型改成指针,如果是空指针,就是没设置,如果不是空指针,则表示是设置的空字符,但是这样引入指针之后就会显得不那么优雅,可能还会引入额外的空指针问题。

这时候有另外一种方法就是用optional去处理,optional是一个复合类型,当声明一个string类型的optional的时候,该变量会有一个额外的接口IsPresent,如果这个变量是被赋了值的话,IsPresent就会返回true,便可以进一步取到该string的值,否则IsPresent会直接返回false。

参考:
https://blog.csdn.net/u013135921/article/details/105038248

2、Java中的Optional

Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。

参考:
https://www.runoob.com/java/java8-optional-class.html

3、go中的optional

go get github.com/ThisIsClark/go-optional
import "github.com/ThisIsClark/go-optional"
op := optional.OptionalEmpty() // 空optional
optionalData := 1
op := optional.Optionalof(optionalData) // 有值的optional
posted on 2022-02-22 10:52  西伯尔  阅读(531)  评论(0编辑  收藏  举报