加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在scala中的单个语句中检查null?

发布时间:2020-12-16 09:45:16 所属栏目:安全 来源:网络整理
导读:在我的scala代码中: QueueManager.add(getObject) 其中getObject是返回类型为QueueObject的对象的方法。 def getObject : QueuObject = { val response = //some response return response} 有没有一种方法可以检查响应是否为空,同时添加QueueObject?我知
在我的scala代码中:

QueueManager.add(getObject)

其中getObject是返回类型为QueueObject的对象的方法。

def getObject : QueuObject = {
    val response = //some response
    return response
}

有没有一种方法可以检查响应是否为空,同时添加QueueObject?我知道我可以这样做:

if (getObject != null)
    QueueManager.add(getObject)

但我不想增加一个缩进级别。有没有一个内联的运算符?

谢谢。

解决方法

尽量避免在Scala中使用null。这只是与Java的互操作性。在Scala中,对可能为空的东西使用选项。如果您正在调用可能返回null的Java API方法,请立即将其包装在选项中。

def getObject : Option[QueueObject] = {
  // Wrap the Java result in an Option (this will become a Some or a None)
  Option(someJavaObject.getResponse)
}

注意:您不需要将其放在val中或使用显式
Scala中的return语句;结果将是价值
在块中的最后一个表达式(实际上,由于只有一个语句,你甚至不需要一个块)。

def getObject : Option[QueueObject] = Option(someJavaObject.getResponse)

除了其他人已经显示的内容(例如调用选项,可能会有点混淆),您也可以调用映射(如果不需要,忽略地图操作的结果):

getObject map QueueManager.add

如果Option是None,这将不起作用,如果它是Some,则调用QueueManager.add。

我发现使用一个常规的,如果比使用任何这些“技巧”只是为了避免缩进级别更清晰和简单。你也可以写一行:

if (getObject.isDefined) QueueManager.add(getObject.get)

或者,如果要处理null而不是使用Option:

if (getObject != null) QueueManager.add(getObject)

编辑 – Ben是对的,如果它有副作用,请小心不要多次调用getObject;更好地写这样:

val result = getObject
if (result.isDefined) QueueManager.add(result.get)

要么:

val result = getObject
if (result != null) QueueManager.add(result)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读