textView.setText(string) 和 textView.text = $string 有什么区别

JaV*_*ang 5 android kotlin

嗨,我正在用Kotlin制作一个应用程序,我发现我可以同时使用

textView.setText(str)
Run Code Online (Sandbox Code Playgroud)

textView.text = $str
Run Code Online (Sandbox Code Playgroud)

我想知道我应该使用什么以及它们之间的区别。谢谢你。

Chr*_*Jem 8

它们在大多数情况下是相同的,基本上 Kotlin 会根据类属性的 getter 生成一个合成属性,您可以使用它来赋值或从中获取值。

//So, for most cases
textView.setText("some value");
//Is the same as
textView.text = "some value"
//The second is simply shorter and is the 'kotlin way' of assigning values
Run Code Online (Sandbox Code Playgroud)

现在,问题是——

在大多数情况下,这工作得很好。但是,正如前面提到的,合成属性是由 getter 生成的,如果还有 setter,就会出现问题。原因是 getter 和 setter可能有不同的类型。例如,EditText有getter,现在,kotlin 创建了类型的Editable合成属性。textEditable

editText.setText("some value"); //Works
editText.text = "some value" //Won't work, will show an error stating that expected type is Editable
Run Code Online (Sandbox Code Playgroud)