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

从Kotlin调用需要函数参数的Java方法

邹玄裳
2023-03-14

我在将这部分Java转换为Kotlin时遇到了问题:

Publishers.map(chain.proceed(request), response -> {
            if (request.getCookies().contains("SOME_VALUE")) { 
                response.cookie(request.getCookies().get(STATE_COOKIENAME).maxAge(0));
            }
            return response;
        });

map方法的第二个参数(注意publishers不是集合)接受函数 。我尝试了几个解决方案,包括提供一个lambda:

Publishers.map(chain?.proceed(request), {
        x: MutableHttpResponse<*>!,
        y: MutableHttpResponse<*>! -> print("It worked")
    })

但这导致:

错误:(32,38)Kotlin:意外标记

错误:(33,38)Kotlin:意外标记

return Publishers.map(chain?.proceed(request), ::processCookie)

private fun processCookie(a: MutableHttpResponse<*>?) {
   print("something something something")
}

错误:(31,56)Kotlin:类型不匹配:推断的类型是Kfunction1<@parametername mutablehttpresponse<>?,unit>but function>!,mutablehttpresponse<*>?>!意料之中

对于上下文,我认为在Kotlin中尝试本教程会很有趣。

共有1个答案

郤瀚
2023-03-14

您没有在lambda中指定返回类型,它是由Kotlin推断的。上一个示例不起作用,因为函数的返回类型是unit,在Java中是void。我将尝试以下方法:

return Publishers.map(chain?.proceed(request), ::processCookie)

private fun processCookie(a: MutableHttpResponse<*>?) : MutableHttpResponse<*>? {
   print("something something something")
   return a
}

如果你写

return Publishers.map(chain?.proceed(request)) { 
  print("something something something")
  it
}

我们在这里使用Kotlin中Lambda的默认参数名-即it。Kotlin编译器将为您推断类型。在Kotlin中也允许将函数的最后一个lambda参数移到括号之外。

return Publishers.map(chain?.proceed(request), Function<T,R> { 
  print("something something something")
  it
})

其中tr必须用实际类型替换

 类似资料:
  • 例外情况。kt: 在科特林: 它在kotlin中工作,函数是内联的。 但是当在Java代码中使用时,它就是不能内联,仍然是一个正常的静态方法调用(从反编译的内容中可以看出)。 像这样的东西:

  • 我正在处理平台频道(PlatformChannels),试图从Kotlin(Kotlin)到Flatter(颤振)进行通信。尝试实际执行颤振平台频道文档中解释的操作,但方向相反: 通道文件颤振平台 其思想是从MainActivity上的ConfigureFlatterEngine函数调用颤振函数。kt级。 为此,我做了,在颤振方面,梅因。dart(颤振的默认示例): 从Kotlin方面来说,我只是

  • 我有一个Kotlin代码: 现在我想从Java类调用这个方法。我不知道该怎么称呼这个。这是我试过的 但它显示了以下错误。

  • 不幸的是: TweetServiceTest.java Hibernateutil.java

  • 问题内容: 我在课堂上有这个功能: 我尝试使用此函数来调用该函数: 问题是编译器希望它看起来像这样: 为什么第一个会导致错误? 问题答案: Swift 2.0更新 :现在,默认情况下,函数的功能与方法相同,并且对于两种方法而言: 第一个参数没有外部名称;和 其他参数的外部名称与内部名称相同。 除此之外,下面的规则仍然适用,只是速记语法已消失。 这是一个更一般的答案:函数在类之外定义为真函数时以及在

  • 嗨,我为tictactoe游戏编写了这个示例代码,除了checkWinner函数之外,其他都正常工作,它接受两个参数ArrayList和currentPlayer来检查胜利者。该函数在每个玩家在tictactoe游戏中查看获胜的点击单元格后调用。我不知道错误在哪里!事先谢谢你