当setter有返回值时,如何使用像obj.value =“”这样的setter?

时间:2016-12-22 23:04:20

标签: kotlin

我有一个Android EditText,我正在设置文本属性。

通常我会使用:

editText.text = "Mars"

但是setter返回一个Editable,所以Kotlin似乎试图用失败的String替换返回的Editable。

所以“解决方法”是:

editText.setText("Mars")

当使用这种类型的setter时,是否有更漂亮的方式(而不是setText())设置文本?

1 个答案:

答案 0 :(得分:15)

在Kotlin中,作业不是表达。赋值表达式几乎没有实际用例,并且往往会使代码可读性变差,更不用说if (a = b)错误,因此它们被排除在语言之外。您可以在this discussion中找到Kotlin团队的更多评论。

实际上不可能使用property = value语法从Java setter返回值,并且您描述的解决方法是获取该值的有效方法。

反过来,Kotlin属性setter不能返回值,例如,用Kotlin functions with receiver表示为调用链返回this值的常见Java习语:

MyClass c = new MyClass()
        .setFoo(x)
        .setBar(y)
        .setBaz(z);

Kotlin(使用apply):

val c = MyClass().apply {
    foo = x
    bar = y
    baz = z
}

另见: