Kotlin:lambda中无法访问自动getter
Kotlin应该自动创建getter和setter,但是Kotlin:lambda中无法访问自动getter,kotlin,Kotlin,Kotlin应该自动创建getter和setter,但是 class Foo { var id = 1 } class Bar { var foos = listOf(Foo()) fun printFooIds() { foos.forEach { println(it.id) } // works foos.forEach { println(it.getId()) } // error "Unresolved reference: getId"
class Foo {
var id = 1
}
class Bar {
var foos = listOf(Foo())
fun printFooIds() {
foos.forEach { println(it.id) } // works
foos.forEach { println(it.getId()) } // error "Unresolved reference: getId"
}
}
为什么会出错?我们如何在这里访问自动生成的getter?当您在Kotlin中写下
foo.id
(或it.id
)时,您正在通过其getter访问属性,无论是返回支持字段的默认getter还是为其编写的自定义getter
val id = foo.id // this calls the getter
foo.id = 1 // this calls the setter
您看到的不是错误,您应该在编写Kotlin代码时使用foo.id
读取属性
使用属性访问语法
foo.id
和foo.getId()
读取属性只是从Kotlin访问Java属性时的一个选项。第二个调用当然是原始Java语法,第一个调用是使语法更为Kotlin友好
类似地,对于Java到Kotlin互操作,您将看到该属性是来自Java的getter setter对,并按如下方式使用它:
foo.getId()
foo.setId(1)
当您在Kotlin中写下
foo.id
(或it.id
)时,您正在通过其getter访问属性,无论它是返回支持字段的默认属性还是为其编写的自定义属性
val id = foo.id // this calls the getter
foo.id = 1 // this calls the setter
您看到的不是错误,您应该在编写Kotlin代码时使用foo.id
读取属性
使用属性访问语法
foo.id
和foo.getId()
读取属性只是从Kotlin访问Java属性时的一个选项。第二个调用当然是原始Java语法,第一个调用是使语法更为Kotlin友好
类似地,对于Java到Kotlin互操作,您将看到该属性是来自Java的getter setter对,并按如下方式使用它:
foo.getId()
foo.setId(1)
通过调用
foo.id
当然通过调用foo.id
当然