Я могу придумать несколько подходов, но все они где-то повторяются…
Если это единственное место, где вам нужно значение по умолчанию, вы можете переместить его из класса:
data class Something(val mandatory: String)
val something = Something(userInput ?: "default value")
Или вы можете позволить конструктору принимать значение NULL - но тогда вам нужно отделить обнуляемый параметр конструктора от ненулевого свойства:
data class Something(mandatoryParam: String?) {
val mandatory = mandatoryParam ?: "default value"
}
val something = Something(userInput)
Или есть варианты, которые Роланд изложил в своем ответе: используйте let
, чтобы избежать некоторых повторений при принятии решения, какой конструктор вызывать; или используя псевдо-конструктор для объекта-компаньона.
Итак, нет однозначного ответа (Думаю, я бы предпочел один из двух подходов, которые я проиллюстрировал, в зависимости от того, относится ли значение по умолчанию каким-либо образом к этому конкретному пользовательскому вводу или оно обязательно должно применяться, как бы объект не создавался.)