Avatar ·

Getters y Setters en Kotlin: ¿cómo declarar y usar propiedades con accessors personalizados?

¡Hola a todos! Recientemente comencé a estudiar Kotlin después de Java y me encontré con la falta de comprensión del funcionamiento de getters y setters. En Java, solía declarar explícitamente campos con modificadores de acceso y luego escribir métodos getField() y setField() para ellos. En Kotlin, según tengo entendido, todo es diferente: hay propiedades (properties) que generan automáticamente getters y setters.

// Ejemplo de mi intento
class Person {
    var name: String = "Unknown"
    var age: Int = 0
    
    // Intento hacer un setter personalizado para age
    set(value) {
        if (value >= 0) {
            // ¿Cómo accedo al campo aquí? ¿field? ¿O this.age?
            this.age = value // ¡Esto causa recursión!
        } else {
            println("La edad no puede ser negativa")
        }
    }
}

Cuando ejecuto este código, obtengo un StackOverflowError debido a la recursión infinita. Entiendo que estoy haciendo algo mal, pero no puedo resolverlo: