首页 > 解决方案 > KClass::memberExtensionFunctions 始终为空

问题描述

代码

import kotlin.reflect.full.*

class FooBar(val bar: String)
fun FooBar.baz(): Unit {println(this.bar)}

fun main(args: Array<String>) {
    FooBar::class.declaredMemberExtensionFunctions.forEach {
        println(it)
    }
    FooBar::class.memberExtensionFunctions.forEach {
        println(it)
    }
}

输出为空

标签: kotlinkotlin-reflect

解决方案


这是因为 declareMemberExtensionFunctions 仅返回在类中声明的扩展函数(如docs所示),而 FooBar.baz() 是顶级声明(因此未在 FooBar.baz 中声明)。

class FooBar(val bar: String) {
    fun FooBar.baz(): Unit {
        println(this.bar)
    }
}

虽然我想这不是您想要的,但像这样构建扩展函数会使您的主要方法输出行。


推荐阅读