Инициализировать производный класс с базовым классом - PullRequest
3 голосов
/ 24 марта 2020

Есть ли в Kotlin встроенный метод для этого?

open class Base {
    var data: Int = 0
}

class Derived(arg: Base) : Base() {
    init {
        copyAllProperties(from = arg, to = this)
    }
}

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Вы можете написать это самостоятельно:

open class Base() {
    var data: Int = 0
}

class Derived(arg: Base) : Base() {
    init {
        super.data = arg.data
    }
}

Или использовать implementation by delegation [1] :

interface Base {
    var data: Int
}

class BaseImpl : Base {
    override var data: Int = 0
}

class Derived(b: Base) : Base by b
0 голосов
/ 27 апреля 2020

Таким образом, нет Kotlin встроенного, который действует как конструктор копирования. Реализация делегацией выглядит как излишнее. Я лично предпочитаю просто написать конструктор копирования самостоятельно:

open class Base() {
    var data: Int = 0

    constructor(arg: Base) : this() {
        data = arg.data
    }
}

class Derived(arg: Base) : Base(arg) {}
...