Либо убедитесь, что data class
инициализирует все значения (поэтому будет доступен конструктор по умолчанию), либо предоставьте соответствующий конструктор по умолчанию самостоятельно:
// setting default values on all properties:
data class Currency(val code : String = "GBP" / * all other properties need to have a default value assigned too */)
// or add a default constructor:
data class Currency(val code : String /* other properties */) {
constructor() : this("GBP" /* other properties default values */)
}
Обратите внимание, что createInstance
использует singleOrNull
внутри и выдает исключение, если существует более 1 (или ни одного) конструктора, удовлетворяющего критериям наличия тольконеобязательные параметры.Поэтому, если у вас есть несколько таких конструкторов или вы не хотите изменять Currency
-класс, затем итерируйте по доступным конструкторам, используйте тот, который подходит, и заполните параметры.Тогда вы, вероятно, даже можете пропустить этот copy
-all.
Почему вы даже используете этот подход для копирования данных?copy
имеет смысл только в том случае, если уже есть объект, для которого вы хотите изменить только некоторые свойства, но в остальном оставить все как есть, и ваш пример, вероятно, можно записать просто:
val payInCurrency = Currency(code = "GBP")
Вы уже знаете, что хотите Currency
, и вы также знаете, что хотите, чтобы код был "GBP"
.