【发布时间】:2016-09-19 08:03:10
【问题描述】:
我正在尝试将我的 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
如果我们查看声明,我们会发现继承自 TextView 的相同签名:
public final void setHint(CharSequence hint)
public final void setText(CharSequence text)
我的印象是x.y = z 是x.setY(z) 的快捷方式,但显然这种印象是错误的。 setText() 被视为普通方法而不是 setter,但是这两种方法之间有什么区别使编译器表现不同呢?我唯一能想到的是TextView 有一个mHint 属性,但我认为可能不是这样。
还有一点我不太明白,android.text.Editable 是从哪里来的?没有对应的setText(Editable)方法,也没有这种类型的公共字段。
【问题讨论】:
标签: android android-edittext kotlin