java - Kotlin 与 Java : Calling function with lambda parameter

标签 java lambda kotlin

我在 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/

相关文章:

java - Ant Build 没有给出确切的类文件

java - 如何检查网络应用程序中使用了哪些图像/css/javascript?

java - JDK8批量采集操作库中奇怪的 "reduce"方法组

c# - 在 C# 中,我可以从方法而不是 lambda 创建表达式树对象吗?

kotlin - 为什么 UInt 没有 toDouble()?

android - 如何在 Splashscreen API 中删除我的启动画面图标周围的圆形 mask ?

java - 给定每个项目的键,如何将项目列表映射到另一个存储桶列表?

java - 在appium中滑动后无法单击元素

c# - 将 C# Console.Write* 与 AWS Lambda 结合使用

intellij-idea - IntelliJ Ultimate Kotlin脚本REPL跳过第一条打印行-临时输出被切断