当前位置: 首页 > 知识库问答 >
问题:

Kotlin - 创建返回类实例的 setter

樊琦
2023-03-14

是否可以自动创建返回this的setter?

尝试了以下操作,但这样它不起作用,但是这个例子显示了我想要实现的目标:

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

手动解决方案

编写coure的<code>setter</code>和<code>getter</code>我自己,如下所示:

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

问题

这个过程可以用kotlin自动化吗?有什么办法可以做到这一点吗?

共有1个答案

颜志业
2023-03-14

您似乎正在查看构建器模式,为此您可能会在静态编程语言中使用DSL而不是链式设置器。

最简单的内置方法是使用带有接收器的“块”(引号,因为with是一个适当的静态编程语言函数,这里没有魔法):

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

或者,类似地:

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

有关构建不可变实例的更详细示例,请参见此处。官方文件中也有更多关于这一主题的内容。

 类似资料:
  • 这是我的代码 这是从谷歌样本..后我想: 问题就在这里: java.lang.RuntimeException:无法创建类com.lacas.db.room.BookMarkViewModel的实例 我可以用这个片段吗? null

  • 问题内容: 我正在尝试使用JNI函数创建Java类,并使用DeviceId.java构造函数方法设置该类的某些属性。我可以使用GetMethodID获取构造函数方法,但是如何创建Device.java的新实例,然后设置属性(setId和setCache)。目标是将完全填充的Device.java对象的实例返回给调用者。有任何想法吗? JNI功能: Java类: 问题答案: 调用时,您为two-ar

  • 我的接口定义为: 然而,这还不够明确,因为我不知道返回的是什么字段。我想要像这样的东西: 但是这会引发NameError,因为还没有定义结果类。是否有任何方法可以指定函数的返回类型(以便内部成员可以通过点运算符访问),而无需为每个函数显式创建结果类? EDIT我没有在他们自己的模块中进行定义,因为我认为会有太多名字尴尬冗长的模块。定义一个内部类会更好,因为它不会每次都强制创建一个新的类名,而且,因

  • 问题内容: 假设这是一个抽象类,具有多个可以重写的方法。 在Java中,我可以执行以下操作: 如何在Kotlin中做同样的事情? 问题答案: 从Kotlin官方语言文档中: 适用于您手头的问题: 正如Peter Lamberg指出的那样-如果匿名类实际上是功能接口的实现( 即不是抽象类的实现 ),则可以使用SAM Conversions 进一步简化该语句: 还请注意有关Java和Kotlin中定义

  • 问题内容: 我想为Kotlin创建POJO类,因为我们知道www.jsonschema2pojo.org将JSON转换为POJO,因此我们可以将其与gson一起使用。 有人知道如何 快速 为Kotlin创建Gson POJO 吗? 编辑: 我知道它使用Data类,但是有没有最简单的创建方法? 问题答案: 是的,我有解决方案 例如: 使用http://www.jsonschema2pojo.org/

  • 如果我使用构建器模式来配置新对象,我可能有两个类,如和(如下所示)。当我想创建一个新的时,我得到它的构建器并开始调用方法来根据需要配置对象。 我遇到的问题显示在main函数中。一旦我从超类调用一个方法,它就会以的意图返回,并且我不能再从子类调用任何方法。 处理这个问题的最佳方法是什么? Main.java Game.java HockeyGame.java 谢了。