Os métodos que seguem as convenções Java para getters e setters (métodos sem argumento com nomes começando com get e métodos de argumento único com nomes começando com set) são representados como propriedades no Kotlin. Porém, ao gerar uma propriedade para um par getter / setter Java, o Kotlin primeiro procura por um getter. O getter é suficiente para inferir o tipo de propriedade do tipo do getter. Por outro lado, a propriedade não será criada se apenas um setter estiver presente (porque o Kotlin não suporta propriedades somente de set no momento).
Quando um levantador entra em ação, o processo de geração de propriedade se torna um pouco ambíguo. O motivo é que o getter e o setter podem ter tipos diferentes. Além disso, o getter e / ou o setter podem ser substituídos em uma subclasse, o que é exatamente o caso do EditText no Android.
No caso acima, a classe Android TextView contém um getter
CharSequence getText()
e um setter vazio
setText(CharSequence)
Se eu tivesse uma variável do tipo TextView, meu código teria funcionado bem. Mas eu usei a classe EditText que contém um getter substituído
Editable getText()
o que significa que você pode obter um Editável para um EditText e definir um Editável como um EditText. Portanto, Kotlin cria razoavelmente um texto de propriedade sintético do tipo Editável. Como a classe String não é editável, é por isso que não posso atribuir uma instância de String à propriedade text da classe EditText.
Parece que o JetBrains esqueceu de especificar o papel dominante dos métodos getter ao gerar propriedades kotlin para os métodos getter e setter Java. De qualquer forma, enviei uma solicitação de recebimento ao site da Jet brains kotlin através do github.
Também detalhei o problema acima neste post médio Como o Kotlin gera propriedades a partir de Java Getters e Setters (Não documentado por Jetbrains)