gpt4 book ai didi

parent-child - Kotlin:子类如何在 super 构造函数调用中使用父类的扩展功能?

转载 作者:行者123 更新时间:2023-12-02 13:06:42 32 4
gpt4 key购买 nike

子类如何在lambda字段中使用其父类的扩展功能?

考虑这个父类:

abstract class Parent(val field: Int.() -> Any) { 
fun Int.print() = println(this)
}

这个 child :
class Child : Parent({
print() // DOESN'T COMPILE
this.print() // DOESN'T COMPILE

5.print() // DOESN'T COMPILE

val value = 5
value.print() // DOESN'T COMPILE
})

最佳答案

您不能在Parent super 构造函数调用参数内使用Child的扩展名的原因是,此时尚未对其Parent部分进行初始化,因此不能用作扩展名的派发接收器。

Member extension functions可以使用结束类的成员,这意味着它们需要与之一起使用的类的实例,并且您不能在其自己的构造函数参数中使用该实例。

否则,您可以在Parent成员内部和构造函数(或Child块)中的任何地方使用init的扩展名,因为在自己的构造函数之前调用了 super 构造函数:

class Child : Parent {
constructor(): super({}) {
5.print()
}

fun f() {
5.print()
}

val g: (Int) -> Unit = { it.print() }
}

关于parent-child - Kotlin:子类如何在 super 构造函数调用中使用父类的扩展功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37131406/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com