如何在需要接口的地方直接传递lambda

如何在需要接口的地方直接传递lambda,lambda,kotlin,Lambda,Kotlin,Lwjgl中有一个函数,例如: public static void glDebugMessageCallback( @Nullable @NativeType("GLDEBUGPROC") GLDebugMessageCallbackI callback, @NativeType("void const *") long userParam) { nglDebugMessageCallback(memAddressSafe(callback), userParam); } 在Kot

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

为什么以及如何解决这个问题?

Kotlin只支持与Java的互操作。因此,要么在Java类中声明便利方法,要么为Kotlin函数声明函数类型,委托给Java调用。

Kotlin仅支持与Java的互操作。因此,要么在Java类中声明便利方法,要么为Kotlin函数声明函数类型,委托Java调用。

仅为Marko Topolnik的答案添加更多信息,Kotlin接口的SAM转换有可能在1.3版中作为实验性功能得到支持。可能的语法如下所示:

sam interface Callback {
    fun justSingleMethod(first: Int, second: Int): Boolean
}
使用方法与Java接口相同:

fun doSomethingWithCallback(callback: Callback) {
    ...
}

doSomethingWithCallback { first, second -> true }

p.S.信息摘自Stanislav Erokhin(俄语)的以下演示

只是为了给Marko Topolnik的答案添加更多信息,Kotlin接口的SAM转换有可能在1.3版中作为实验功能得到支持。可能的语法如下所示:

sam interface Callback {
    fun justSingleMethod(first: Int, second: Int): Boolean
}
使用方法与Java接口相同:

fun doSomethingWithCallback(callback: Callback) {
    ...
}

doSomethingWithCallback { first, second -> true }

附注信息取自Stanislav Erokhin(俄语)

的以下演示文稿,希望他们不会为此保留另一个关键字:)每个演示文稿,
sam
不会是新的关键字。它将是“安全关键字”(与
数据
相同),您仍然可以声明名为
sam
的变量。希望他们不会仅为此保留另一个关键字:)每个演示,
sam
不会是新的关键字。它将是“安全关键字”(与
数据
相同),并且您仍然能够声明名为
sam
的变量。