在Kotlin中构建课程的正确方法是什么

时间:2018-01-03 10:23:22

标签: kotlin

我有一个包含很多非空字段和可空字段的类。如果我宣布他们像

val key : String

Kotlin编译器当然会给我一个错误,告诉我他们需要初始化,所以我想我应该把不可空的那些放在构造函数中,并添加一个辅助构造函数,以便在需要使用non初始化的可空字段时空值。这是为了避免调用构造函数然后调用setter,然后我调用一个构造函数。这就是它看起来像

import utilities.Constants
import java.util.*

class Action(val key: String,
        //val actionNode: ActionNode
             val date: Date,
             val stringValue: String,
             val autoRecognitionStatus: Constants.MeasurementAutoRecognized,
             val recognitionId: String,
             val method: Constants.MeasurementMethod,
             val userKey: String,
             val userName: String,
             val isInRange: Boolean) {


    var pictureUrl: String? = null
    var remotePictureUrl: String? = null



    constructor(key: String,
            // actionNode: ActionNode
                date: Date,
                stringValue: String,
                autoRecognitionStatus: Constants.MeasurementAutoRecognized,
                recognitionId: String,
                method: Constants.MeasurementMethod,
                userKey: String,
                userName: String,
                isInRange: Boolean,
                pictureUrl: String?,
                remotePictureUrl: String?)
            : this(key,
            // actionNode
            date,
            stringValue,
            autoRecognitionStatus,
            recognitionId,
            method,
            userKey,
            userName,
            isInRange) {
        this.pictureUrl = pictureUrl
        this.remotePictureUrl = remotePictureUrl

    }

}

我的问题是这段代码看起来很糟糕。我并不是说外表是最重要的,但我觉得这是一个错误的方法来做到这一点。特别是当我需要委托给主构造函数时,我不得不重写大量的参数

是否有更好的,或者#34;权利"这样做的方法?

编辑:我在问:我是否为Kotlin可以轻松完成的事情编写了大量代码?

1 个答案:

答案 0 :(得分:6)

如果类是完整的,那么你也可以将它变为数据类。此外, Kotlin 支持属性的默认值,因此您只需要一个构造函数,即主要构造函数。以下类看起来更好,几乎与您定义的相同。

UINavigationBar

如果您需要 Java 的辅助构造函数,则可以使用@JvmOverloads注释给定的构造函数。