【发布时间】:2019-11-28 14:58:57
【问题描述】:
首先,我有以下 Moshi json。
@JsonClass(generateAdapter = true)
data class OrderDetails(
@Json(name = "_id") val id: Int,
@Json(name = "status") val status: String,
@Json(name = "tableNo") val tableNo: Int,
@Json(name = "serverId") val serverId: Int?,
@Json(name = "items") val orderItems: List<OrderDetailsItem>
)
除 serverId 外,所有这些字段都应包含数据。 这些数据是从我可以允许用户选择订单的服务器获取的。
onSeletedOrder
.map { it.orderDetails.serverId } //blows up here apparently.
.filterNotNull() //have tried this but it doesn't matter.
.flatMap { findServerBy(it) }
.map { "${it.firstname} ${it.lastname}" }
当我映射到上面的 serverId 时,我遇到了 NPE。 有趣的是,地图(即使它是可选的)之后会进行不安全的强制转换。 我希望它在地图之后保持可选性。 我假设这是因为向后桥接 RxJava。 好奇是否有人对这是为什么有进一步的解释。
【问题讨论】:
-
RxJava 中不允许 Null 值,因此禁止映射到 null 并与 NPE 崩溃。您可以在
map之前使用filter { it.orderDetails.serverId != null }进行预过滤。至于为什么map 在 Kotlin 中没有产生Optional<T>类型,我不知道。 -
onSeletedOrder:Observable<OrderDetails>的类型是什么?Single?还有什么? -
类型是 PublishSubject
标签: kotlin rx-java2 rx-kotlin2