繁体   English   中英

使用Kotlin在RxJava中处理Nullable Type

[英]Nullable Type handling in RxJava with Kotlin

在Java中使用RxJava2时,我的优点是map()自动过滤发出的空值。 但是在Kotlin中有可空类型我最终会做这样的事情:

val loadConferencesSingle = service.getConferences()
        .map { it.conferences ?: listOf<Conference>() }

在这种情况下,调用service.getConferences()是一个单独发出ConferecesResponse ,看起来像

data class ConferencesResponse(val conferences: List<Conference?>? = null)

因此,如果完整发布的会议列表为空,我最终使用Elvis运算符来发出一个空列表。 无法在map发出null。

有没有人知道如何使用Kotlin在RxJava中更好地处理可空类型? 我已经喜欢这个解决方案及其简洁,但我觉得有更好的方法可以解决这个问题。

在Kotlin中, Optional是一个完全有效的类型。 缺少的值也是一个结果 您可以创建一个简单的数据类和函数,如下所示:

data class Optional<T>(val value: T?)
fun <T> T?.carry() = Optional(this)

或者,您可以创建一些简单的扩展函数,以使后续运算符更容易:

fun <T, R> Observable<Optional<T>>.mapNullable(mapper: (T?) -> R?) : Observable<Optional<R>>
  = map { mapper(it.value).carry() }

fun <T, R> Observable<Optional<T>>.mapFromNullable(mapper: (T?) -> R) : Observable<R>
  = map { mapper(it.value).carry() }

..等等。

这完全取决于什么是有效的结果。 没有conferences意味着没有conferences吗? 然后空列表是一个合适的替代品。 如果不打算发生,则抛出异常可能是适当的响应。

另外抛出异常也适用于elvis运算符: it.conferences ?: throw IllegalStateException("Why is it null?")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM