我在 kotlin 文件中定义了这个函数
fun loadSubmissions(projectId: Long?, completion: (List<Submission>, Exception) -> Unit) { ... }
并且想像这样从 Java 调用它
loadSubmissions(project.getProjectId(), (submissions, e) ->
{
updateSubmissions(submissions);
return null;
});
与
void updateSubmissions(List<Submission> submissionList)
{ .. }
但它给了我
Error:(226, 35) error: incompatible types: List<CAP#1> cannot be
converted to List<Submission>
where CAP#1 is a fresh type-variable:
CAP#1 extends Submission from capture of ? extends Submission
据我所知,lambda 函数的参数似乎是 List<CAP#>
而不是预期和定义的 List<Submission>
如果我将类转换为 java,我可以轻松地使用 lambda 回调调用该函数。
我做错了什么
最佳答案
您尚未透露变量 submissions
的类型,但错误消息似乎表明它是 List<? extends Submission>
。这是与 List<Submission>
不同的类型,并且前一种类型的引用不能分配给后一种类型的变量(尽管反过来也可以)。
这至少会给您带来两个问题:
- lambda 本身在调用
updateSubmissions()
时类型不正确。 ,并且 - 由其参数类型组成的 lambda 类型与
loadSubmissions()
的第二个参数的类型不兼容.
要解决此问题,您需要扩大这两个方法的参数类型或缩小变量 submissions
的类型.
关于java - Kotlin 与 Java : Calling function with lambda parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48063196/