我正在尝试将我的Android项目切换到Kotlin.我有一个EditText(我的子类TextView),我想以编程方式设置提示和文本.提示按预期工作.但是对于文本,如果我尝试使用Kotlin setter语法,我会遇到类型不匹配异常:
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
Run Code Online (Sandbox Code Playgroud)
如果我们查看声明,我们会发现从TextView以下内容继承的相同签名:
public final void setHint(CharSequence hint)
public final void setText(CharSequence text)
Run Code Online (Sandbox Code Playgroud)
我的印象x.y = z是一种捷径,x.setY(z)但显然这种印象是错误的.setText()被视为普通方法而不是setter,但这两种方法之间的区别是什么使编译器的行为不同?我唯一能想到的是,TextView有一个mHint属性,但我不认为它可能是这样.
我不太明白的另一件事是,android.text.Editable来自哪里?没有相应的setText(Editable)方法,也没有这种类型的公共领域.
谢谢.