Я пытаюсь переключить свой проект Android на Kotlin. У меня есть EditText
(подкласс TextView
), для которого я хочу установить подсказку и текст программно. Подсказка работает как положено. Для текста, однако, я получаю исключение несоответствия типов, если я пытаюсь сделать это, используя синтаксис Kotlin:
val test = EditText(context)
test.setHint("hint") // Lint message: "Use property access syntax"
test.hint = "hint" // ok
test.setText("text") // ok (no lint message)
test.text = "text" // Type mismatch: inferred type is kotlin.String but android.text.Editable! was expected
Если мы посмотрим на объявление, мы найдем идентичные подписи, унаследованные от TextView
:
public final void setHint(CharSequence hint)
public final void setText(CharSequence text)
У меня сложилось впечатление, что xy = z
было сокращением для x.setY(z)
но, очевидно, это впечатление было неправильным. setText()
рассматривается как обычный метод, а не как установщик, но какая разница между этими двумя методами, которая заставляет компилятор вести себя по-разному? Единственное, о чем я могу подумать, это то, что TextView
имеет свойство mHint
но я не думаю, что это может иметь место.
Еще одна вещь, которую я не совсем понимаю: откуда взялся android.text.Editable
? Нет соответствующего метода setText(Editable)
и нет открытого поля этого типа.