Как создать объект имеющий те же три поля что и существующий data class а также два дополнительных поля-объекта

«Как создать объект имеющий те же три поля что и существующий data class а также два дополнительных поля-объекта» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Можно использовать наследование или композицию. Но для data class наследование не рекомендуется, поэтому лучше создать новый data class с нужными полями и преобразовать существующий объект:

data class Original(val a: Int, val b: String, val c: Boolean)

data class Extended(
    val original: Original,
    val newField1: SomeType,
    val newField2: AnotherType
)

// Использование:
val original = Original(1, "text", true)
val extended = Extended(original, someValue, anotherValue)

Или через деструктуризацию:

data class Extended(
    val a: Int,
    val b: String,
    val c: Boolean,
    val newField1: SomeType,
    val newField2: AnotherType
) {
    constructor(original: Original, f1: SomeType, f2: AnotherType) : 
        this(original.a, original.b, original.c, f1, f2)
}

Выбор зависит от того, нужно ли сохранять связь с оригинальным объектом.