Los métodos que siguen las convenciones de Java para getters y setters (métodos sin argumento con nombres que comienzan con get y métodos de argumento único con nombres que comienzan con set) se representan como propiedades en Kotlin. Pero, al generar una propiedad para un par getter / setter de Java, Kotlin al principio busca un getter. El captador es suficiente para inferir el tipo de propiedad del tipo del captador. Por otro lado, la propiedad no se creará si solo está presente un setter (porque Kotlin no admite propiedades de solo set en este momento).
Cuando un setter entra en juego, el proceso de generación de propiedades se vuelve un poco ambiguo. La razón es que el getter y el setter pueden tener un tipo diferente. Además, el getter y / o el setter pueden anularse en una subclase, que es exactamente el caso de EditText en Android.
En el caso anterior, la clase Android TextView contiene un captador
CharSequence getText()
y un setter nulo
setText(CharSequence)
Si tuviera una variable de tipo TextView, mi código habría funcionado bien. Pero usé la clase EditText que contiene un captador anulado
Editable getText()
lo que significa que puede obtener un Editable para un EditText y establecer un Editable en un EditText. Por lo tanto, Kotlin crea razonablemente un texto de propiedad sintética de tipo Editable. Como la clase String no es editable, es por eso que no puedo asignar una instancia de String a la propiedad de texto de la clase EditText.
Parece que JetBrains olvidó especificar el papel dominante de los métodos getter al generar propiedades kotlin para los métodos getter y setter de Java. De todos modos, he enviado una solicitud de extracción al sitio web de Jet brains kotlin a través de github.
También he detallado el problema anterior en esta publicación de medio. ¿Cómo genera Kotlin propiedades a partir de captadores y establecedores de Java (sin documentar por Jetbrains)?