Я столкнулся с проблемой в своем Android-приложении, используя Kotlin и RxJava. Он представлен ниже.
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, окончательная версия выпущена только вчера (15 февраля 2016 г.).