Методи, що слідують конвенціям Java для getters і setters (методи без аргументів з іменами, що починаються з get, і одноаргументні методи з іменами, що починаються з набору) представлені як властивості в Kotlin. Але, генеруючи властивість для пари Getter / setter Java, Котлін спочатку шукає геттера. Геттеру достатньо для виведення типу майна з типу геттера. З іншого боку, властивість не буде створено, якщо присутній лише сетер (оскільки Котлін на даний момент не підтримує властивості лише набору).
Коли сетер вступає в гру, процес генерації властивостей стає дещо неоднозначним. Причина в тому, що геттер і сетер можуть мати різний тип. Більше того, геттер та / або сеттер можуть бути замінені підкласом, що саме стосується EditText в android.
У наведеному випадку клас Android TextView містить геттер
CharSequence getText()
і пустота сетера
setText(CharSequence)
Якби у мене була змінна типу TextView, мій код добре працював би. Але я використав клас EditText, який містить переосмислений геттер
Editable getText()
а це означає, що ви можете отримати редагований редактор для редагування та встановити для редагування редактор редагування. Тому Котлін обґрунтовано створює синтетичний текст властивості типу Editable. Оскільки клас String не піддається редагуванню, тому я не можу призначити екземпляр String текстовій властивості класу EditText.
Схоже, JetBrains забув вказати домінуючу роль методів getter, генеруючи kotlin властивості для методів Getter та setter Java. У будь-якому разі я подав запит на тягу на веб-сайт Jet brains kotlin через github.
Я детально описав вище проблему і в цій середній публікації Як Котлін генерує майно від Java Getters та Setters (Недокументований Jetbrains)