首页 > 解决方案 > 如何在需要接口的地方直接传递 lambda

问题描述

在 Lwjgl 中有一个函数,例如:

public static void glDebugMessageCallback(
@Nullable @NativeType("GLDEBUGPROC") GLDebugMessageCallbackI callback, 
@NativeType("void const *") long userParam) {
    nglDebugMessageCallback(memAddressSafe(callback), userParam);
}

在 Kotlin 中,我可以通过以下方式直接调用它:

glDebugMessageCallback({ _, _, _, _, _, message, _ -> Unit }, NULL)

现在,我想覆盖这个调用,省略最后一个参数。

但如果我输入:

fun glDebugMessageCallback(callback: GLDebugMessageCallbackI) {

}

然后没有相同的调用NULL

glDebugMessageCallback({ _, _, _, _, _, message, _ -> Unit })

将得到类型不匹配:

Required: GLDebugMessageCallbackI

Found: (???, ???, ???, ???, ???, ???, ???) → Unit

为什么以及如何解决它?

标签: lambdakotlin

解决方案


Kotlin仅支持与 Java 互操作的SAM 转换。因此,要么在 Java 类中声明你的便捷方法,要么为你的 Kotlin 函数声明一个函数类型,委托给 Java 调用。


推荐阅读