Kotlin:lambda中无法访问自动getter

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"

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"
  }
}

为什么会出错?我们如何在这里访问自动生成的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
当然