【问题标题】:Defining a default constructor and a secondary constructor in Kotlin, with properties在 Kotlin 中定义默认构造函数和辅助构造函数,以及属性
【发布时间】:2017-06-12 15:13:04
【问题描述】:

我正在尝试在 Kotlin 中创建一个简单的 POJO(POKO?)类,具有默认的空构造函数和带有参数的辅助构造函数,用于提供属性

这并没有给我firstNamelastName 属性:

class Person() {

    constructor(firstName: String?, lastName: String?) : this()
}

这给了我属性,但它们在实例化后没有设置:

class Person() {

    constructor(firstName: String?, lastName: String?) : this()

    var firstName: String? = null
    var lastName: String? = null
}

这给了我一个编译错误,说“不允许在辅助构造函数参数上使用'var'。”:

class Person() {

    constructor(var firstName: String?, var lastName: String?) : this()
}

那么,这是怎么做到的呢?我怎样才能有一个默认构造函数和一个带有参数和属性的辅助构造函数?

【问题讨论】:

    标签: constructor kotlin pojo


    【解决方案1】:

    你可以只拥有一个带有default values参数的主构造函数:

    class Person(var firstName: String? = null, var lastName: String? = null)
    

    【讨论】:

    • 哇。这很优雅。谢谢!
    • "注意:在 JVM 上,如果主构造函数的所有参数都有默认值,编译器将生成一个额外的无参数构造函数,它将使用默认值。这样更容易将 Kotlin 与 Jackson 或 JPA 等库一起使用,这些库通过无参数构造函数创建类实例。" kotlinlang.org/docs/reference/classes.html
    • 无法在没有参数的情况下调用 Person().. 显示编译错误
    【解决方案2】:

    有两种方法可以做到这一点。两者都需要 valvar 在主目录中。

    Primary 中的默认参数

    class Person(var firstName: String? = null, var lastName: String? = null)
    

    次要构造函数调用主要

    class Person(var firstName: String?, var lastName: String?) {
        constructor() : this(null, null) {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      相关资源
      最近更新 更多