В Котлине возможно ли иметь цепочку делегирования?Чтобы продемонстрировать то, что я пытаюсь достичь, вот пример (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, но компилятор этого не видит. Есть ли способ заставить работать приведение?