Por que o código em uma expressão de objeto pode acessar variáveis do escopo que o contém no kotlin?
No Kotlin, o código em uma expressão de objeto pode acessar variáveis do escopo que o contém, assim como o código a seguir:
fun countClicks(window: JComponent) {
var clickCount = 0
var enterCount = 0
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
clickCount++
}
override fun mouseEntered(e: MouseEvent) {
enterCount++
}
})
}
Mas por que? Em Java, não é permitido fazer isso, porque o ciclo de vida do objeto é diferente das variáveis locais, portanto, oenterCount
ouclickCount
talvez seja inválido ao tentar acessar o objeto. Alguém pode me dizer como Kotlin faz isso?