在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
为什么以及如何解决?
答案 0 :(得分:2)
Kotlin仅支持SAM conversion与Java互操作。因此要么在Java类中声明你的方便方法,要么为你的Kotlin函数声明一个函数类型,委托给Java调用。
答案 1 :(得分:1)
为了向Marko Topolnik的答案添加更多信息,有可能在1.3版本中支持Kotlin接口的SAM转换作为实验性功能。可能的语法如下所示:
sam interface Callback {
fun justSingleMethod(first: Int, second: Int): Boolean
}
使用方法与Java接口相同:
fun doSomethingWithCallback(callback: Callback) {
...
}
doSomethingWithCallback { first, second -> true }
P.S。信息取自Stanislav Erokhin(俄语)https://youtu.be/gwk4rdgr36E?t=56m54s
的以下介绍