当前位置: 首页 > 知识库问答 >
问题:

静态编程语言与Java:使用lambda参数调用函数

周通
2023-03-14

我在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函数的参数似乎是< code >列表

如果我把类转换成java,我可以很容易地用lambda回调函数调用那个函数。

我做错了什么

共有1个答案

阙繁
2023-03-14

您没有公开变量< code >提交的类型,但是错误消息显示它是< code >列表

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

  • lambda 本身在调用更新提交 () 时不是类型正确的,并且
  • lambda 的类型(包括其参数类型)与第二个参数 loadSubmissions() 的类型不兼容。

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

 类似资料:
  • 我想为我的游戏创建一个简单的倒计时,当游戏开始时,我想每秒调用这个函数: 我试过这个: 但应用程序不幸停止,第二次调用run函数 3周前,我刚刚开始使用android开发和静态编程语言,到目前为止,我对它了解最多。 在Xcode中使用swift时,我使用了这一行,我认为类似的东西也适用于Kotlin

  • 动机: 在我们的Android项目中,我们有许多验证,比如

  • 我在一个Kotlin文件中有一个名为“onitmselected”的变量 在Java文件中,我试图设置该变量,但无法找出正确的语法。 lambda表达式一直希望返回Void,但是,当我返回Void时,它就不会编译。 我尝试了各种语法,但似乎无法正确。 使用具有参数的函数设置变量的正确方法是什么?

  • 编译时得到这个错误 意外标记(使用;分隔同一行的表达式) 柯特林 lambda 函数语法是否与 Java Lambda 表达式略有不同?

  • 考虑以下代码,我们获取列表的块,加入它们并打印到标准输出: 代码工作正常。我想更改lambda调用(

  • 我知道内联函数可能会提高性能 编译器可以发出以下代码,而不是为参数创建函数对象并生成调用。(来源) 但是我发现没有kotlin为一个非内联函数创建的函数对象。为什么?