如何使用 java 从 kotlin 类读取回调 (Android)

Giu*_*ius 0 java android callback kotlin

这是我的科特林课程:

class example {

    var a = 0

    fun add(b: Int, callback: (Int) -> Unit){
        a += b
        callback(a)
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在java代码中使用这个函数?

Mas*_*eki 7

编辑: 正如@Drawn Raccoon在评论中提到的,您可以add通过返回Unit.INSTANCE从java代码中调用该方法:

爪哇:

example e = new example();
e.add(16, a -> {
    // do some work with 'a'
    return Unit.INSTANCE;
});
Run Code Online (Sandbox Code Playgroud)

或者从 kotlin 调用它而不返回任何值:

科特林:

add(16) {
    a -> // do some work with 'a'
}
Run Code Online (Sandbox Code Playgroud)

不正确(正确答案请参阅编辑部分):

我认为你不能使用Unittype 作为将从 java 代码调用的回调的输出类型。UnitJava 不识别。相反,您可以使用Void?(我不知道“Void”,现在我无法测试它)。

科特林代码:

class example {

    var a = 0

    fun add(b: Int, callback: (Int) -> Void?){
        a += b
        callback(a)
    }
}
Run Code Online (Sandbox Code Playgroud)

并从 java 调用它:

example e = new example();
e.add(16, a -> {
    // do some work with 'a'
    return null;
})
Run Code Online (Sandbox Code Playgroud)

并从 kotlin 调用:

val example = example()
e.add(16, { a ->
    // do some work with 'a'
    null
})
Run Code Online (Sandbox Code Playgroud)

[此外,“example”对于 kotlin 或 java 类来说不是一个好名字,请尝试使用大写,例如“Example”]

  • “我认为你不能使用 Unit”——这不是真的,“Unit 在 Java 中不被识别”——这不是真的。Java 中的单位自动识别为 Void/void (2认同)