Kotlin:一个返回"this"的默认设置器

Mey*_*ann 3 setter return properties this kotlin

我知道这不是"严格按照设计模式"等等等等,但......

在Kotlin中,有没有办法创建一个返回" this" 的"default-ish"setter ,就像

var foo:Bar = Something()
    set(f:Bar) {
       foo = f
       return this // Alas, that would not compile because Setter returns Unit
    }
Run Code Online (Sandbox Code Playgroud)

当setter返回时非常方便this,因为可以在不必声明Builder的情况下制作Builder模式.它只是做得更短:

BlahBlah().setFoo(x).setFoo2(y)...
Run Code Online (Sandbox Code Playgroud)

BlahBlah.Builder().setFoo(x)....
Run Code Online (Sandbox Code Playgroud)

要么

var b = BlahBlah()
b.setFoo(x)
b.setFoo2(y)
...
Run Code Online (Sandbox Code Playgroud)

管他呢

此外,如果一个二传手Unit还是回来,为什么不this呢?

mie*_*sol 8

Kotlin有关于如何创建类型安全构建器的很好的文档.Kotlin中的二传手被称为

receiver.property = value
Run Code Online (Sandbox Code Playgroud)

this从setter方法返回仅在代码从Java中使用时才有用.说过Kotlin二传手必须回归Unit.即使没有专门的构建器,在Kotlin上设置几个属性的典型任务也更为简洁:

class BlahBlah {
  var name = "John"
  var age = 12
}

BlahBlah().apply {
  name = "Sarah"
  age = 10
}
Run Code Online (Sandbox Code Playgroud)

  • ...而且,最重要的是,应用块中的所有内容都由“this”接收。您甚至可以调用方法!val CoolText=TextView(context).apply{text="moo"; 文本大小=TSIZE;animate(myCoolAnimation);} 总而言之:当您拥有一辆全新的玛莎拉蒂时,为什么还要使用 1950 年代的大众汽车?apply 比旧的 Java builder-ish setter 更强大。 (2认同)