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

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

通常我会使用:

editText.text = "Mars" 

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

所以“解决方法”是:

 editText.setText("Mars") 

当使用这种类型的setter时,有没有更好的方法(而不是setText() )来设置文本?

在Kotlin中,作业不是表达式。 赋值表达式几乎没有真正的用例,并且往往会恶化代码的可读性,更不要说if (a = b) bug了,所以他们被排除在语言之外。 你可以在这个讨论中找到Kotlin团队的更多评论。

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


Kotlin属性设置器反过来也不能返回一个值,例如,用Kotlin 函数和接收器来表示返回给调用链的this值的普通Java成语:

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

Kotlin(使用apply ):

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

也可以看看:

  • 如何将Java分配表达式转换为Kotlin