【发布时间】:2016-02-16 19:21:31
【问题描述】:
我在使用 Kotlin 和 RxJava 的 Android 应用程序中遇到了问题。如下所示。
import rx.Observable
data class TestUser(val name: String)
fun getTestUser(): Observable<TestUser> {
return Observable.just(TestUser("Brian")).flatMap { getUser() } // this compiles
}
fun getTestUser2(): Observable<TestUser> {
val observable = Observable.just(TestUser("Brian")).flatMap { getUser() }
return observable // this does not compile
}
fun getUser(): Observable<TestUser?> {
return Observable.just(null)
}
在getTestUser2 中,编译器将最终返回类型推断为Observable<TestUser?> 并且不会编译。然而,在getTestUser 中,代码确实会编译,并且当它运行时,当TestUser 返回null 时,该可观察对象的任何订阅者都可能会感到惊讶。
我猜这与在 Kotlin 和 Java 之间来回切换有关。但是,编译器可以看到getTestUser2的差异这一事实让我认为这可以修复。
编辑
这是在 Kotlin 1.0 上,昨天(2016 年 2 月 15 日)发布的最终版本。
【问题讨论】:
-
我想,这是他们正在使用的问题跟踪器:youtrack.jetbrains.com/issues/KT。如果您创建错误报告,您更有可能收到语言创建者的确认/解释
-
团队确认这是一个错误。问题:youtrack.jetbrains.com/issue/KT-11108