【问题标题】:Kotlin - create setters that return class instanceKotlin - 创建返回类实例的设置器
【发布时间】:2018-07-19 06:30:57
【问题描述】:

是否可以自动创建返回 this 的设置器?

尝试了以下,但这种方式不起作用,但这个例子显示了我想要实现的目标:

var pos: Int?
    set(value) : IPosItem {
        this.pos = value
        return this
    }

手动解决方案

当然写settersgetters 我自己,如下所示:

var _pos: Int?
fun getPos(): Int? = _pos
fun setPos(value: Int?): IPosItem {
    _pos = value
    return this
}

问题

这个过程可以用 kotlin 自动化吗?任何想法如何实现这一目标?

【问题讨论】:

  • 除非目标是在 Kotlin 中创建 Java API,否则您不需要这样做,因为简单地使用 apply() 可以避免像在 Java 中那样重复变量名,并且会成为惯用的 Kotlin。 kotlinlang.org/api/latest/jvm/stdlib/kotlin/apply.html
  • 如果目标是创建 Java API,那么返回 void 以外的东西的方法就不是 setter。这是一种方法。
  • 我需要这个,因为我使用的注释处理器会生成这种类型的设置器,所以我想在我的自定义界面中使用上面,我告诉处理器生成的类正在实现......跨度>

标签: kotlin


【解决方案1】:

您似乎正在查看 builder pattern,为此您可能会在 Kotlin 中使用 DSL over chained setter。

最简单的内置方法是使用带有receiver 的“块”(引号,因为with 是正确的Kotlin 函数,这里没有魔法):

val newThing = Thing()
with ( newThing ) {
    pos = 77
    otherValue = 93
}

或者,类似地:

val newThing = Thing().apply {
    pos = 77
    otherValue = 93
}

请参阅here 了解构建不可变实例的更详细示例。官方文档也有more on this topic

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2013-11-23
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    相关资源
    最近更新 更多