Les méthodes qui suivent les conventions Java pour les getters et les setters (méthodes sans argument avec des noms commençant par get et méthodes à argument unique avec des noms commençant par set) sont représentées comme des propriétés dans Kotlin. Mais, tout en générant une propriété pour une paire getter / setter Java, Kotlin recherche d'abord un getter. Le getter suffit à déduire le type de propriété du type du getter. D'autre part, la propriété ne sera pas créée si seul un setter est présent (car Kotlin ne prend pas en charge les propriétés définies uniquement pour le moment).
Lorsqu'un setter entre en jeu, le processus de génération de propriété devient un peu ambigu. La raison en est que le getter et le setter peuvent avoir un type différent. De plus, le getter et / ou le setter peuvent être surchargés dans une sous-classe, ce qui est exactement le cas de EditText sous Android.
Dans le cas ci-dessus, la classe Android TextView contient un getter
CharSequence getText()
et un vide de setter
setText(CharSequence)
Si j'avais une variable de type TextView, mon code aurait bien fonctionné. Mais j'ai utilisé la classe EditText qui contient un getter remplacé
Editable getText()
ce qui signifie que vous pouvez obtenir un Editable pour un EditText et définir un Editable sur un EditText. Par conséquent, Kotlin crée raisonnablement un texte de propriété synthétique de type Editable. Comme la classe String n'est pas modifiable, c'est pourquoi je ne peux pas affecter une instance String à la propriété text de la classe EditText.
Il semble que JetBrains ait oublié de spécifier le rôle dominant des méthodes getter lors de la génération des propriétés kotlin pour les méthodes getter et setter Java. Quoi qu'il en soit, j'ai soumis une demande de tirage au site Web de Jet Brains Kotlin via github.
J'ai également détaillé le problème ci-dessus dans ce message moyen Comment Kotlin génère-t-il des propriétés à partir de Java Getters and Setters (non documenté par Jetbrains)