kotlin - Elvis 运算符,如果 != null 则返回或执行完全不同的操作
问题描述
我有一个名为 Subscription 的模型和一个试图接收该订阅的服务,但如果订阅不存在,我想调用一个不同的服务。
我的目标是:
val recipientSubscription = subscribeService.getSubscription(pushMessage.recipient)
?: cachingService.add(pushMessage)
但这不起作用,因为现在收件人订阅不再属于订阅类型。
我该如何解决这个问题?
解决方案
subscribeService.getSubscription(pushMessage.recipient)
和的返回类型cachingService.add(pushMessage)
不相同,因此会产生错误。值的返回类型default
应与可空值相同。
这是我的例子:
val a: Int? = null //a is integer
val b: Int = a ?: 3 //Valid, default value of b is 3, which is integer
val c: Int = a ?: "s" //<-- Invalid, default value is not Integer
如果您有更多问题,请告诉我。
编辑
风格 1(更Java
喜欢):使用传统的 if-else 方法
var recipientSubscription = subscribeService.getSubscription(pushMessage.recipient)
if (recipientSubscription == null) {
cachingService.add(pushMessage) //Add subscription.
recipientSubscription = subscribeService.getSubscription(pushMessage.recipient) //set subscription again.
}
Style 2 (more Kotlin
Like):使用Kotlin 的run
作用域函数方法
val recipientSubscription = subscribeService.getSubscription(pushMessage.recipient)
?: run {
cachingService.add(pushMessage) //Add subscription.
subscribeService.getSubscription(pushMessage.recipient) //return new subscription.
}
推荐阅读
- java - 在本地创建的计时器上调用 cancel() 或 purge
- c# - 如何制作基于网格的关卡?
- python - python3多处理的参数
- html - 单击时 HTML 元素没有获得焦点
- python - 遍历 char 数组时,Python Array 出现故障
- python - 在 Keras 中处理批处理中的可变长度序列
- python - Python 3.7 Authlib UnsupportedAlgorithmError
- php - 请告诉我为什么将空数组写入变量
- java - 使用 Java8 匹配方法比较两个列表
- python - ModuleNotFoundError:没有名为“gmaps”的模块