无法使用属性访问语法识别Kotlin安全强制转换

无法使用属性访问语法识别Kotlin安全强制转换,kotlin,casting,compiler-errors,null,javafx-8,Kotlin,Casting,Compiler Errors,Null,Javafx 8,我使用JavaFX,并修改了如下属性,以确保列表永远不会返回null class BaseListProperty<T>(): SimpleObjectProperty<List<T>>() { override fun setValue(value: List<T>?) { super.setValue(value ?: listOf()) } override fun getValue(): List

我使用JavaFX,并修改了如下属性,以确保列表永远不会返回null

class BaseListProperty<T>(): SimpleObjectProperty<List<T>>() {

    override fun setValue(value: List<T>?) {
        super.setValue(value ?: listOf())
    }

    override fun getValue(): List<T> {
        return super.getValue() ?: listOf()
    }

}
class BaseListProperty():SimpleObject属性(){
覆盖乐趣设置值(值:列表?){
super.setValue(值?:listOf())
}
覆盖乐趣getValue():列表{
返回super.getValue()?:listOf()
}
}
在另一个类中,我有一个设置表格单元格值的函数,问题就出现了

override fun setCellValue(columnId: String, newValue: Any?) {
    when (columnId) {
        // This is OK as expected
        id -> property.setValue(newValue as? List<SomeClass>)
        // Both below throws "Type Mismatch" Error
        // Required: List<SomeClass>
        // Found: List<SomeClass>?
        id -> property.value = newValue as? List<SomeClass>
        id -> property.value = newValue as List<SomeClass>?
    }
}
override fun setCellValue(columnId:String,newValue:Any?){
何时(列ID){
//这和预期的一样
id->property.setValue(newValue作为?列表)
//下面两个都抛出“类型不匹配”错误
//必填项:列表
//找到:列表?
id->property.value=newValue as?列表
id->property.value=newValue作为列表?
}
}

既然我已经将
setValue
定义为接收null,为什么在使用属性访问语法时抛出编译器错误,而在使用原始函数时却没有?我正在使用最新的Kotlin
1.3.50
。谢谢。

如果getter和setter类型不匹配,则无法将其正确转换为属性。两者都必须设置/返回可为null或非null。@Pawel,你说得对。在我更改为
getValue():List?
之后,属性访问语法不再给出编译器错误。我想我必须使用函数调用。你能写下这个作为回答吗?谢谢