我正在尝试在Kotlin中创建函数引用,我的理解是我应该能够在编译时访问生成的KFunctionN接口(interface),但是我收到KFunction1<T, R>的“未解决的引用”编译错误。

例如:

inline fun <reified T : Any, reified R : Any> passFn(someFn: KFunction1<T, R>) {
    //consume someFn
}

我对 Kotlin 的反射(reflection)是正常的,并且工作良好。有什么想法我想念的吗?

我正在使用Kotlin 1.3.21和IntelliJ 2018.3。

最佳答案

这看起来像一个IDE问题,我输入了import kotlin.reflect.KFunction1导入,编译器错误消失了。

但是,如果您添加一个返回KFunction1类型并明确声明该类型的表达式/语句,则Intellij会正确导入它。例如;

"\\s+".toRegex()::matches

可以提取为
val kFunction1: KFunction1<@ParameterName(name = "input") CharSequence, Boolean> = "\\s+".toRegex()::matches

10-04 17:12