gpt4 book ai didi

java - Groovy 在 Java 可选上同时运行 map 和 orElseGet

转载 作者:行者123 更新时间:2023-12-01 07:17:14 26 4
gpt4 key购买 nike

我在使用 Groovy 2.4.16 和 Java 8.0.212-zulu 以及 java.util.Optional 时遇到了奇怪的行为。

所以,这是代码:

def optRegion = new HttpRegion(context).region()

optRegion.map{ region ->
log.info("FOUND REGION: ${region} - ${optRegion}")
}.orElseGet{
log.info("NO-REGION, JUST KIDDING! - ${optRegion}")
}

这些是日志:

2019-08-27 10:05:31.060 +0200 [vert.x-eventloop-thread-2] INFO  c.n.p.XXX:85 - FOUND REGION: POLAND - Optional[POLAND]
2019-08-27 10:05:31.061 +0200 [vert.x-eventloop-thread-2] INFO c.n.p.XXX:87 - NO-REGION, JUST KIDDING! - Optional[POLAND]

我使用普通的 Groovy 类,没有 @CompileStatic 或任何其他注释。

HttpRegion 返回常规 java.util.Optional

class HttpRegion {
HttpRegion(RoutingContext context) {
this.context = context
}

Optional<Region> region() {
return java.util.Optional.of(...)
}
}

谁能向我解释一下出了什么问题,以及为什么可选映射的两个分支都被执行了?

最佳答案

Optional上调用mapmap返回的值替换可选内容

常规闭包总是返回一个值。

在本例中,它是 null 值,这就是为什么 Optional 在调用 map 后变为空

关于java - Groovy 在 Java 可选上同时运行 map 和 orElseGet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57670368/

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