Котлин - Делегация - PullRequest
       2

Котлин - Делегация

0 голосов
/ 08 июня 2018

В Котлине возможно ли иметь цепочку делегирования?Чтобы продемонстрировать то, что я пытаюсь достичь, вот пример (https://kotlinlang.org/docs/reference/delegation.html) в измененном документе kotlin:

interface Base {
    fun print()
}

class BaseImpl(val x: Int) : Base {
    override fun print() { println(x) }
}

class Derived(var b: Base, val someData: Float = 10f) : Base by b

class SecondDerived(var b: Base) : Base by b

fun main(args: Array<String>) {
    val b = BaseImpl(10)
    val derived = Derived(b)
    val secondDerived: Base = SecondDerived(derived)
    secondDerived.print()// prints 10

    if (secondDerived is Derived) println(secondDerived.someData) //here secondDerived is Derived == false
}

Я бы ожидал, что «secondDerived» будет иметь тип «Derived», но приведениескажем, что это не так.

Я подозреваю, что в памяти база SecondDerived действительно имеет тип Derived, но компилятор этого не видит. Есть ли способ заставить работать приведение?

1 Ответ

0 голосов
/ 08 июня 2018

В JVM у класса может быть только один суперкласс, и делегирование классов Kotlin никак не меняет его.Все, что он делает - генерирует реализации Base методов интерфейса, которые делегируют экземпляру Derived.Не влияет на is проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...