【问题标题】:How to use setter like obj.value = "" when the setter has return value?当setter有返回值时,如何使用像obj.value =“”这样的setter?
【发布时间】:2016-12-27 19:24:59
【问题描述】:

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

通常我会使用:

editText.text = "Mars"

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

所以“解决方法”是:

editText.setText("Mars")

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

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    在 Kotlin 中,赋值不是表达式。赋值表达式很少有真正的用例,而且往往会降低代码的可读性,更不用说if (a = b) 错误,因此它们被排除在语言之外。您可以在this discussion 中找到更多来自 Kotlin 团队的 cmets。

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


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

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

    Kotlin(使用apply):

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

    另见:

    【讨论】:

    • 感谢您提供有关 Java vs Kotlin 赋值表达式的答案和信息。
    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2014-03-05
    相关资源
    最近更新 更多