Kotlin vs. Java:使用lambda参数调用函数

时间:2018-01-02 15:00:22

标签: java lambda kotlin

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

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

想要像这样用Java调用它

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

但它给了我

List<CAP#>

我意识到lambda函数的参数似乎是List<Submission>而不是预期和定义的rgba()

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

我做错了什么

1 个答案:

答案 0 :(得分:2)

您尚未公开变量submissions的类型,但错误消息似乎表明它是List<? extends Submission>。这是与List<Submission>不同的类型,前一种类型的引用不能分配给后一种类型的变量(尽管反过来也可以)。

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

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

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