我有一个包含很多非空字段和可空字段的类。如果我宣布他们像
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可以轻松完成的事情编写了大量代码?
答案 0 :(得分:6)
如果类是完整的,那么你也可以将它变为数据类。此外, Kotlin 支持属性的默认值,因此您只需要一个构造函数,即主要构造函数。以下类看起来更好,几乎与您定义的相同。
UINavigationBar
如果您需要 Java 的辅助构造函数,则可以使用@JvmOverloads
注释给定的构造函数。