将lambda函数从java类传递到kotlin类会给我错误

时间:2019-12-20 16:14:41

标签: java android kotlin lambda

我的科特琳课:

class InstallationReceiver(activity : RootActivity, url : String, progressCallback : 
((percentage : Int) -> Unit)?,  callback : ((isUpdated : Boolean) -> Unit)?, packageName: 
String){

//my code

}

我正在将lambda的乐趣从Java类传递给此类:

new InstallationReceiver(getActivity(), apkUrl, integer -> **{ 
String text = "Installing app"+integer;
textView.setText(text);
}**,true,null);

为什么此lambda函数要求使用Unit返回类型?我什至尝试返回Unit.INSTANCE 但没有任何帮助我。它仍然显示错误。

1 个答案:

答案 0 :(得分:2)

那些星号是什么?
我尝试了这个最小的示例,它起作用了:

科特林

class InstallationReceiver(
    a: ((percentage: Int) -> Unit)?
) 

Java

new InstallationReceiver(percentage -> {
    String text = "Installing app" + percentage;
    return Unit.INSTANCE;
});

此外,您正在传递truenull,其中构造函数期望使用lambda((isUpdated : Boolean) -> Unit)和不可为空的String
您可以在传递空字符串的同时避免编译(您不应该这样做,因为应用程序会在运行时崩溃),但是请确保您需要传递lambda而不是布尔值。
与上面的示例类似:

isUpdated -> {
    // your code
    return Unit.INSTANCE;
}