2017-01-08 22 views
10

Trong Kotlin chúng ta có thể xác định một quan sát cho một tài sản phi null,Kotlin: nullable đại biểu hữu quan sát

var name: String by Delegates.observable("<no name>") { 
    prop, old, new -> 
    println("$old -> $new") 
} 

tuy nhiên điều này là không thể

var name: String? by Delegates.observable("<no name>") { 
    prop, old, new -> 
    println("$old -> $new") 
} 

Điều gì sẽ là cách để xác định một có thể quan sát được cho một tài sản không có giá trị?

Edit: đây là lỗi biên dịch

Property delegate must have a 'setValue(DataEntryRepositoryImpl, KProperty<*>, String?)' method. None of the following functions is suitable: 
public abstract operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String): Unit defined in kotlin.properties.ReadWriteProperty 
+0

Tại sao bạn nghĩ nó không phải là có thể? Nó sẽ hoạt động tương tự. Vui lòng giải thích vấn đề bạn gặp phải với đoạn mã thứ hai. – voddan

+0

Nó không biên dịch, cập nhật với lỗi trình biên dịch. – Francesc

Trả lời

14

Đối với một số lý do những suy luận kiểu thất bại ở đây. Bạn phải chỉ định loại đại biểu theo cách thủ công. Thay vào đó bạn có thể bỏ qua việc kê khai tài sản loại:

var name by Delegates.observable<String?>("<no name>") { 
    prop, old, new -> 
    println("$old -> $new") 
} 

Hãy gửi một vấn đề tại https://youtrack.jetbrains.com/issues/KT

+2

Tắt một địa chỉ đã tồn tại: https://youtrack.jetbrains.com/issue/KT-10930 – Francesc

Các vấn đề liên quan