Необязательная переменная класса данных Kotlin

data class Student(
    val id: Int?,
    val firstName: String?,
    val lastName: String?,
    val hobbyId: Int?,
    val address1: String?,
    val address2: String?,
    val created: String?,
    val updated: String?,
    ...
)

у меня есть как выше класс данных, и я хочу создать экземпляр Student только с именем и фамилией. Поэтому, если я запустил это,

// creating a student 
Student(
    firstName = "Mark"
    lastName = "S"
)

Я значение параметра " id " не передается ... ошибки.

чтобы избежать этого, я изменил класс студента, как это,

data class Student(
    val id: Int? = null,
    val firstName: String? = null,
    val lastName: String? = null,
    val hobbyId: Int? = null,
    val address1: String? = null,
    val address2: String? = null,
    val created: String? = null,
    val updated: String? = null,
    ...
)

но это выглядит так уродливо.

есть ли лучший способ?

2 ответов


Я не уверен, что решение, которое я вам даю, является лучшим или нет. Но, безусловно, опрятной.

единственное, что мне не нравится идти с nulls в качестве параметра по умолчанию, потому что Kotlin предлагает нулевую безопасность, позволяет не удалять его только потому, что для выполнения некоторых других требований. Отметьте их null, только если они могут быть null. Иначе старый Java-способ хорош. Инициализировать их с некоторым значением по умолчанию.

data class Student(val id: Int,
                   val firstName: String,
                   val lastName: String,
                   val hobbyId: Int,
                   val address1: String,
                   val address2: String,
                   val created: String,
                   val updated: String) {
    constructor(firstName: String, lastName: String) :
            this(Int.MIN_VALUE, firstName, lastName, Int.MIN_VALUE, "", "", "", "")
}

Вы можете установить значения по умолчанию в основном конструкторе как показано ниже.

data class Student(val id: Int = Int.MIN_VALUE,
               val firstName: String,
               val lastName: String,
               val hobbyId: Int = Int.MIN_VALUE,
               val address1: String = "",
               val address2: String = "",
               val created: String = "",
               val updated: String = "")

затем вы можете использовать именованные аргументы при создании нового экземпляра student, как показано ниже.

Student(firstName = "Mark", lastName = "S")