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 extends Submission>
List extends Submission>
。 这是一个与List
不同的types,前一个types的引用不能分配给后一types的variables(尽管反之亦然)。
这给你带来至少两个问题:
- lambda本身在调用
updateSubmissions()
和。时不是types正确的 - 包含其参数types的lambdatypes与
loadSubmissions()
的第二个参数的types不兼容。
要解决这个问题,您需要扩大这两种方法的参数types或缩小variablessubmissions
的types。