首页 文章

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

提问于
浏览
0

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

val key : String

Kotlin编译器当然会给我一个错误,告诉我他们需要初始化,所以我想我应该把不可空的那些放在构造函数中,并在我需要使用非null值初始化的可空字段时添加一个辅助构造函数 . 这是为了避免调用构造函数然后调用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

    }

}

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

有没有更好或“正确”的方式来做到这一点?

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

1 回答

  • 6

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

    data class Action(
         val key: String,
         val date: Date,
         val stringValue: String,
         val autoRecognitionStatus: MeasurementAutoRecognized,
         val recognitionId: String,
         val method: MeasurementMethod,
         val userKey: String,
         val userName: String,
         val isInRange: Boolean,
         var pictureUrl: String? = null,
         var remotePictureUrl: String? = null
    )
    

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

相关问题