我在使用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日)发布的最终版本。