Kotlin与Java:使用lambda参数调用函数

我在kotlin文件中定义了这个函数

fun loadSubmissions(projectId: Long?, completion: (List, Exception) -> Unit) { ... } 

并且想要像这样从Java调用它

 loadSubmissions(project.getProjectId(), (submissions, e) -> { updateSubmissions(submissions); return null; }); 

 void updateSubmissions(List submissionList) { .. } 

但它给了我

 Error:(226, 35) error: incompatible types: List cannot be converted to List where CAP#1 is a fresh type-variable: CAP#1 extends Submission from capture of ? extends Submission 

我意识到lambda函数的参数似乎是List而不是预期和定义的List

如果我把类转换为java,我可以轻松地调用lambda回调函数。

我究竟做错了什么

您尚未透露variablessubmissions的types,但错误消息似乎表明它是List List 。 这是一个与List不同的types,前一个types的引用不能分配给后一types的variables(尽管反之亦然)。

这给你带来至少两个问题:

  • lambda本身在调用updateSubmissions()和。时不是types正确的
  • 包含其参数types的lambdatypes与loadSubmissions()的第二个参数的types不兼容。

要解决这个问题,您需要扩大这两种方法的参数types或缩小variablessubmissions的types。