我在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>的类型,并且前一种类型的引用不能分配给后一种类型的变量(尽管相反也可以)。

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

  • 在调用updateSubmissions()
  • 时,lambda本身类型不正确
  • lambda的类型(包括其参数类型)与loadSubmissions()的第二个参数的类型不兼容。

  • 要解决此问题,您需要扩大这两种方法的参数类型或缩小变量submissions的类型。

    10-08 00:39
    查看更多