java - 如何使用 vavr 返回 void 或 String
问题描述
当某些条件不满足时,我有一个函数应该不返回任何内容(void)或字符串。
我试试这条线 Either.left(Void)
private Either<Void,String> processOrReturnErrorMessage(){
//Do something and in some case return a message of failed conditions
return Either.left(Void);
}
解决方案
在 vavr 中有一个类型,它被称为Option
. 如果没有错误可以返回Option.none()
,如果有错误则返回Option.some(errorMessage)
。
如果您仍想使用Either
,我建议您将左侧用于错误,将右侧用于值(快乐路径),因为Either
是右偏的,因此map
and方法仅在它是正确值时才flatMap
起作用。在您的情况下,由于没有要返回的值(即 void),您可以使用, 并在成功的情况下返回,因为它是该类型的唯一居民(null 是 Java 中所有非原始类型的居民,截至现在,不幸的是)。Either
Either<String, Void>
Either.right(null)
null
Void
或者你可以引入一个新的类型,称为Unit
一个单一的居民(即单例),Either<String, Unit>
用于你的返回类型并返回Either.right(Unit.instance())
来表示缺乏有意义的返回值并避免返回null
值,因为返回null
值有点难看。
推荐阅读
- php - 仅为 for 循环中的第一次迭代分配变量值
- pdf - 了解Pdf格式规范的数学背景?
- python - 如何在贪吃蛇游戏中使用深度强化学习
- error-handling - 处理异常 Erlang 时 throw 和 catch 的区别
- java - 调试模式下的 Docker 和 jre 11
- kubernetes - 创建 ClusterRole 作为默认计算服务帐户失败并出现额外权限错误
- node.js - azure webapp 节点默认启动脚本
- c# - 自定义访客模式实现
- javascript - React native Refresh 有效,但下一次调用仍使用最后一个令牌
- regex - perl 或 sed 命令查找 2 个字符串并将第一个字符串替换为字符串 2