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

7

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

textView.setText(str)

并且

textView.text = $str

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


基本上是一样的,但是 .setText() 是 Java 的语法。 - Alexander Cavalheiro Becker
第一个是Java的传统setter,第二个是Kotlin中使用的属性setter。请阅读此文。基本上两者都是相同的。 - ADM
这个代码:textView.text = $str 甚至无法编译通过。您是不是想要写成:textView.text = "$str" - forpas
5个回答

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

现在,这里有个问题 -

在大多数情况下,这样做很好。但是,如前所述,如果存在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

0

textView.setText(str)textView.text = $str,都是将指定的 str 设置到 TextView 中。我能想到的唯一区别是:

textView.setText(str) //旧的 Java 设置文本的方式,其中调用了 方法 setText(str)。

textView.text = $str //新的 Kotlin 设置文本的方式,这里不是调用方法,而是调用了一个 合成属性


0

就像在 Kotlin 中一样,您不使用 findViewById

因此,要访问您的 textView,导入语句必须像这样

import kotlinx.android.synthetic.main.<layout>.*

textView.text = $str是Kotlin插件为安卓提供的合成属性访问。

两者都可以使用,在可用性上没有太大区别,但对于更容易编写代码来说,这会更好些。

如需更多信息,请阅读https://kotlinlang.org/docs/tutorials/android-plugin.html


0

两者的工作方式相同。

Java规范

textView.setText(“…”)

Kotlin 约定

textView.text=”…”

“遵循Java约定的getter和setter方法(名称以get开头的无参数方法和名称以set开头的单参数方法)在Kotlin中表示为属性。”- 文档

因此,如果您正在使用Kotlin遵循Kotlin约定,则使用textView.text = "..."而不是textView.setText("...")

参考 - 从Activity、Button和TextView开始学习Kotlin


0

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
如果您想进一步阅读: Kotlin中的setter和getter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接