嗨,我正在使用Kotlin制作一个应用程序,并发现我可以同时使用
textView.setText(str)
并且
textView.text = $str
我想知道我应该使用什么以及它们之间的区别。谢谢。
大多数情况下它们是相同的,基本上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
在大多数情况下,这样做很好。但是,如前所述,如果存在setter,则合成属性是从getter生成的。问题在于getter和setter可能具有不同的类型。例如,EditText
具有Editable
getter,现在,kotlin创建了一个类型为Editable
的合成属性text
。
editText.setText("some value"); //Works
editText.text = "some value" //Won't work, will show an error stating that expected type is Editable
textView.setText(str)
和 textView.text = $str
,都是将指定的 str
设置到 TextView
中。我能想到的唯一区别是:
textView.setText(str) //旧的 Java 设置文本的方式
,其中调用了 方法 setText(str)。
textView.text = $str //新的 Kotlin 设置文本的方式
,这里不是调用方法,而是调用了一个 合成属性。
就像在 Kotlin 中一样,您不使用 findViewById
因此,要访问您的 textView,导入语句必须像这样
import kotlinx.android.synthetic.main.<layout>.*
textView.text = $str
是Kotlin插件为安卓提供的合成属性访问。
两者都可以使用,在可用性上没有太大区别,但对于更容易编写代码来说,这会更好些。
如需更多信息,请阅读https://kotlinlang.org/docs/tutorials/android-plugin.html。
两者的工作方式相同。
Java规范
textView.setText(“…”)
Kotlin 约定
textView.text=”…”
“遵循Java约定的getter和setter方法(名称以get开头的无参数方法和名称以set开头的单参数方法)在Kotlin中表示为属性。”- 文档
因此,如果您正在使用Kotlin遵循Kotlin约定,则使用textView.text = "..."
而不是textView.setText("...")
。
setText()
和 getText()
方法被称为设置器和获取器,它们在 Kotlin 中会自动生成。
class ClassName{
var name: String= "some_value"
}
您可以直接使用类的对象中的 name
属性,也可以使用自动生成的 setter
方法。
class Another{
var c = ClassName()
c.name = "value"
c.setName("value")
}
val
开头而不是var
,那么它是不可变的,不允许使用setter
。
textView.text = $str
甚至无法编译通过。您是不是想要写成:textView.text = "$str"
? - forpas