科特林应该自动创建吸气剂和吸气剂,但是...
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"
}
}
为什么会出错?我们如何在这里访问自动生成的吸气剂?
答案 0 :(得分:3)
在Kotlin中写下foo.id
(或it.id
)时,您 通过其getter访问该属性,无论它是返回后备字段的默认属性还是您为其编写的自定义标签。
val id = foo.id // this calls the getter
foo.id = 1 // this calls the setter
您看到的不是错误,您在编写Kotlin代码时应该使用foo.id
来读取属性。
仅当从Kotlin访问Java属性时,才可以选择同时使用属性访问语法foo.id
和foo.getId()
读取属性。当然,第二个调用是原始的Java语法,第一个调用是Kotlin-to-Java interop feature,以使该语法更加与Kotlin友好。
类似地,对于Java-to-Kotlin互操作,您将看到该属性是Java的getter-setter对,并按如下方式使用它:
foo.getId()
foo.setId(1)