gpt4 book ai didi

scala - 在Scala中处理嵌套的可为空对象的惯用方法?

转载 作者:行者123 更新时间:2023-12-04 22:04:45 24 4
gpt4 key购买 nike

我正在使用scala,最近继承了一些Java代码,需要移植这些代码,但不幸的是,在Scala中重写它并不存在。它具有深度嵌套的对象结构,任何级别都可以为空。通常我只关心嵌套深处的值。

理想情况下,我会做这样的事情:

 Option(foo.blah.blarg.doh)

但是如果 foo.blah.blarg 中的任何一个为空,这将生成一个 NPE。

现在我已经开始尝试将它包装起来:
Try(Option(foo.blah.blarg.doh)).getOrElse(None)

请注意,使用 .toOption 并不能很好地工作,因为如果链的最后一位为空,它可能会导致 Some(null) 。

我不是特别喜欢这个结构,还有其他想法吗?

最佳答案

利用按名称参数构建您自己的结构:

def handleNull[T](x: => T): Option[T] = try Option(x) catch {
case _: NullPointerException => None
}

handleNull(foo.blah.blarg.doh)

关于scala - 在Scala中处理嵌套的可为空对象的惯用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376339/

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