Les méthodes qui suivent les conventions Java pour les getters et setters (méthodes sans argument dont le nom commence par get et méthodes à argument unique dont le nom commence par set) sont représentées comme des propriétés dans Kotlin. Mais, lorsqu'il génère une propriété pour une paire getter/setter Java, Kotlin recherche d'abord un getter. Le getter est suffisant pour déduire le type de la propriété à partir du type du getter. En revanche, 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 set-only pour le moment).
Lorsqu'un setter entre en jeu, le processus de génération de propriétés devient un peu ambigu. La raison en est que le getter et le setter peuvent avoir des types différents. De plus, le getter et/ou le setter peuvent être surchargés dans une sous-classe , ce qui est exactement le cas de EditText dans Android.
Dans le cas ci-dessus, la classe TextView d'Android contient un getter
CharSequence getText()
et un setter void
setText(CharSequence)
Si j'avais eu une variable de type TextView, mon code aurait fonctionné correctement. Mais j'ai utilisé la classe EditText qui contient un getter surchargé.
Editable getText()
ce qui signifie que vous pouvez obtenir un Editable pour un EditText et définir un Editable pour un EditText. Par conséquent, Kotlin crée raisonnablement une propriété synthétique text de type Editable. Comme la classe String n'est pas Editable, c'est pourquoi je ne peux pas affecter une instance String à la propriété text de la classe EditText.
Il semble que JetBrains a oublié de spécifier le rôle dominant des méthodes getter tout en générant des propriétés kotlin pour les méthodes getter et setter Java. Quoi qu'il en soit, j'ai soumis une demande de pull au site Web de Jet brains kotlin via github.
J'ai également détaillé le problème ci-dessus dans ce billet de medium. Comment Kotlin génère-t-il des propriétés à partir de Getters et Setters Java (non documenté par Jetbrains) ?
0 votes
Duplicata possible de Comment fonctionne la syntaxe d'accès aux propriétés de Kotlin pour les classes Java ?
0 votes
Aside : Vous n'avez pas besoin de findViewById si vous utilisez les extensions Android Kotlin (livrées avec Android Studio). Vous devriez simplement pouvoir appeler
nexttxt.setText(name)
sans aucune recherche ou casting.3 votes
Ce n'est pas un code Kotlin comme vous le prétendez @Singh.
0 votes
@VladyslavMatviienko : Ouais, nous devrions supprimer ce fil de discussion parce que tous ceux qui ne peuvent pas définir le texte dans leur EditText kotlin penseraient immédiatement à rechercher "syntaxe d'accès aux propriétés kotlin pour les classes java." C'est la première chose qui m'est venue à l'esprit quand j'ai vu cette erreur de compilation.