Каков правильный способ построить класс в Котлине?

У меня есть класс с большим количеством ненулевых полей и с нулевыми значениями. Если я объявлю их как

val key : String 

компилятор Kotlin, конечно, даст мне ошибку, говоря, что они должны быть инициализированы, поэтому я решил, что должен поместить недействительные в конструктор и добавить вторичный конструктор, когда мне нужны поля с нулевым значением, инициализированные с ненулевыми значениями. Это делается для того, чтобы избежать вызова конструктора и затем сеттеров, вместо этого я бы назвал один конструктор. Это то, что вышло так, как будто

 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 } } 

Моя проблема в том, что этот код выглядит ужасно. Я не говорю, что взгляды – это самое главное, но у меня такое чувство, что это неправильный способ сделать это из-за этого. Особенно, потому что мне приходится переписывать тонну параметров, когда мне нужно делегировать основному конструктору

Есть ли лучший или «правильный» способ сделать это?

EDIT: Что я спрашиваю: написал ли я много кода для чего-то, что можно сделать с Котлином намного проще?

Если класс завершен таким образом, вы можете сделать его также классом данных . Также 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 .