8

如何调用 super 的扩展函数?

例如:

open class Parent {
    open fun String.print() = println(this)
}

class Child : Parent() {
    override fun String.print() {
        print("child says ")
        super.print() // syntax error on this
    }
}
4

2 回答 2

3

即使print()函数是在 内部定义的Parent,它也属于String,而不是Parent。所以没有print你可以调用的函数Parent,这就是你想要做的super

我认为您在 Kotlin 中尝试执行的调用类型没有语法支持。

于 2017-06-02T16:06:51.527 回答
0

目前不可能,并且 kotlin 问题跟踪器中存在一个问题 - KT-11488

但是您可以使用以下解决方法:

open class Parent {
    open fun String.print() = parentPrint()

    // Declare separated parent print method
    protected fun String.parentPrint() = println(this)
}

class Child : Parent() {
    override fun String.print() {
        print("child says ")
        parentPrint() // <-- Call parent print here
    }
}
于 2021-05-03T10:41:12.717 回答