Properties Kotlin:返回“0”的默认ish设置程序;这";

Properties Kotlin:返回“0”的默认ish设置程序;这";,properties,return,this,kotlin,setter,Properties,Return,This,Kotlin,Setter,我知道这不是“严格按照设计模式”之类的,但是 在Kotlin中,有没有一种方法可以创建一个“default ish”setter,返回“this”,比如 当setter返回this时非常方便,因为这样就可以创建一个构建器模式,而无需声明一个构建器。只需缩短时间即可: BlahBlah().setFoo(x).setFoo2(y)... 或 或者别的什么 此外,如果setter返回单位,为什么不这个也一样呢?Kotlin有个不错的选择。Kotlin中的setter被调用为 receiver.p

我知道这不是“严格按照设计模式”之类的,但是

在Kotlin中,有没有一种方法可以创建一个“default ish”setter,返回“
this
”,比如

当setter返回
this
时非常方便,因为这样就可以创建一个构建器模式,而无需声明一个构建器。只需缩短时间即可:

BlahBlah().setFoo(x).setFoo2(y)...

或者别的什么

此外,如果setter返回
单位
,为什么不
这个
也一样呢?

Kotlin有个不错的选择。Kotlin中的setter被调用为

receiver.property = value
从setter方法返回
this
,只有在代码来自Java的情况下才有帮助。已经说过,Kotlin setter必须返回
单元
。即使没有专门的构建器,在Kotlin中,在对象上设置多个属性的典型任务也要简洁得多:

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

BlahBlah().apply {
  name = "Sarah"
  age = 10
}

不,这是不可能的:科特林的二传手返回单位的设计

构建器模式的存在是为了克服构造函数参数组合的增加导致构造函数的指数列表的问题。 在Kotlin中,通过使用默认参数值来解决此问题:

data class Foo(
  val a1: String = "a1",
  val a2: String = "a2"
)
现在,您可以通过命名参数来轻松跳过参数,而不用使用生成器模式:

val foo = Foo(a1 = "bar")
如果您真的想拥有某种生成器:

class FooBuilder {
    var a1: String = "a1"
    var a2: String = "a2"

    fun build() = Foo(a1, a2)
}

val foo = FooBuilder().apply {
  a1 = "bar"
}.build()
但是,这需要更多的代码。

请查看

没有内置机制,但您可以利用它轻松编写自返回方法:

class Foo {
    var bar: Bar
    fun bar(b: Bar) = apply { bar = b }
}

不,不是真的。这是关于默认访问器的。答案中也包括了这些。问题主要来自Java。旧的令人沮丧的Java。。。因为我有大量的代码要慢慢迁移。科特林做得很漂亮。只是旧的Java很烦人。很好的惯例。只要您不忘记将其用作方法,而不是属性访问。但是我喜欢它……而且,最重要的是,apply块中的所有内容都被“this”接收。你甚至可以调用方法!val coolText=TextView(context)。应用{text=“moo”;textSize=TSIZE;animate(mycolanimation);}来总结这一切:当你有一辆全新的玛莎拉蒂时,为什么要使用1950年代的大众汽车?apply比旧的javabuilder-ish设置程序强大得多。
val foo = Foo(a1 = "bar")
class FooBuilder {
    var a1: String = "a1"
    var a2: String = "a2"

    fun build() = Foo(a1, a2)
}

val foo = FooBuilder().apply {
  a1 = "bar"
}.build()
class Foo {
    var bar: Bar
    fun bar(b: Bar) = apply { bar = b }
}