Avatar ·

Getters et setters en Kotlin : comment déclarer et utiliser des propriétés avec des accesseurs personnalisés ?

Bonjour à tous ! J'ai récemment commencé à étudier Kotlin après Java et j'ai rencontré des difficultés à comprendre le fonctionnement des getters et setters. En Java, j'avais l'habitude de déclarer explicitement des champs avec des modificateurs d'accès, puis d'écrire pour eux les méthodes getField() et setField(). En Kotlin, comme je l'ai compris, tout est différent — il y a des propriétés (properties), qui génèrent automatiquement des getters et setters.

// Exemple de ma tentative
class Person {
    var name: String = "Unknown"
    var age: Int = 0
    
    // J'essaie de faire un setter personnalisé pour age
    set(value) {
        if (value >= 0) {
            // Comment accéder au champ ici ? field ? Ou this.age ?
            this.age = value // Provoque une récursion !
        } else {
            println("L'âge ne peut pas être négatif")
        }
    }
}

Quand j'exécute ce code, j'obtiens une StackOverflowError à cause d'une récursion infinie. Je comprends que je fais quelque chose de travers, mais je n'arrive pas à comprendre :