java - 将 java 方法转换为 kotlin。返回 lambda 表达式

标签 java kotlin

kotlin 1.3.31

我有以下 Java 代码片段,我正在尝试将其转换为 Kotlin

private ArgumentMatcher<List<Person> customArgumentMatcher(final int size) {
    return argument -> argument.size() == size;
}

我对上面的理解是一个以ArgumentMatcher作为返回类型的方法声明,并且在lambda表达式中执行接口(interface)的方法并返回结果 boolean 值。如果我的解释有误,请纠正我。

但是,当我尝试将其转换为 Kotlin

 private fun customArgumentMatcher(size: Int): ArgumentMatcher<List<Person>> {
    return { argument -> argument.size == size }
 }

我收到以下错误:

Required ArgumentMatcher<List<Person>>
found: (???) -> Boolean

非常感谢您的建议,

最佳答案

由于 ArgumentMatcher 是您需要使用的 Java 函数接口(interface):

fun customArgumentMatcher(size: Int): ArgumentMatcher<List<Person>> {
    return ArgumentMatcher { argument -> argument.size == size }
}

请参阅SAM Conversions Kotlin 引用的部分。

<小时/>

您还可以使用:

fun customArgumentMatcher(size: Int) = ArgumentMatcher<List<Person>> { it.size == size }
<小时/>

参见gidds' answer了解为什么上述语法是必要的一些背景。

关于java - 将 java 方法转换为 kotlin。返回 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56718113/

相关文章:

java - 对调用 Activity 的影响。 ( Intent )

javascript - Closure Compiler 将 < 替换为\x3c

java - 对 libGDX 项目的外部 gradle 依赖

java - 在由查询填充的 jcombobox 中设置默认值

generics - 访问泛型函数中的对象属性

android - “Invalid platform app” 使用 Instagram 基本显示 API 时出错

android - 如何为导航栏图标设置边距?

java - 将 Joda 1.6.2 DateTime 转换为 2.1 DateTime

android - Kotlin 中的 Dagger 2 Unresolved reference DaggerXXXSub

android - Kotlin CoroutineScope 无法在 android View 中取消