Tôi đã gặp sự cố trong ứng dụng Android của mình bằng Kotlin và RxJava. Nó được trình bày dưới đây.Kotlin RxJava Nullable Bug
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)
}
Trong getTestUser2
, trình biên dịch suy luận kiểu trả về thức như Observable<TestUser?>
và không biên dịch. Tuy nhiên, trong getTestUser
mã không biên dịch, và khi nó chạy, bất kỳ thuê bao để mà quan sát được có thể được in cho một bất ngờ khi TestUser
trở lại null
.
Tôi đoán nó là cái gì để làm với đi lại giữa Kotlin và Java. Nhưng, thực tế là trình biên dịch có thể thấy sự khác biệt trong getTestUser2
làm cho tôi nghĩ rằng điều này có thể khắc phục được.
Chỉnh sửa
Đây là phiên bản cuối cùng Kotlin 1.0 phát hành ngày hôm qua (ngày 15 tháng 2 năm 2016).
Tôi nghĩ rằng, đây là theo dõi vấn đề họ đang sử dụng: https://youtrack.jetbrains.com/issues/KT . Bạn có nhiều khả năng nhận được xác nhận/giải thích từ những người tạo ngôn ngữ, nếu bạn tạo báo cáo lỗi –
Nhóm xác nhận đó là một lỗi. Vấn đề: https://youtrack.jetbrains.com/issue/KT-11108 – voddan