【问题标题】:Passing lambda function from java class to kotlin class gives me error将 lambda 函数从 java 类传递给 kotlin 类给我错误
【发布时间】:2025-11-25 07:55:01
【问题描述】:

我的 kotlin 类:

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

//my code

}

我将 lambda fun 从 java 类传递给这个类,如下所示:

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

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

【问题讨论】:

  • 主要是因为((percentage : Int) -> Unit)? 意味着传递Integer 并取回Unit 的数据。
  • 是的,我想通了。问题出在另一个 lambda 函数中,而我认为它在第一个函数中。谢谢顺便说一句。

标签: java android kotlin lambda


【解决方案1】:

这些星号是什么?
我尝试了这个最小的例子,它可以工作:

科特林

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;
}

【讨论】:

  • 我把这些星号放在我认为错误所在的代码中。
  • 感谢您的帮助,我使用了返回语句 Unit.INSTANCE,现在它可以正常工作了。