Kotlin:方法参考不起作用?

Kotlin: Method reference not working?

我似乎无法在 Kotlin 中使用对象的方法引用。此功能存在于 Java.

例如在 Java 中,如果我循环遍历一个字符串以将每个字符附加到一个 writer:

string.forEach(writer::append);

但是在 Kotlin 中使用相同的语法是行不通的,因为:

目前,Kotlin 仅支持对 的顶级和局部函数以及成员的引用,不支持单个实例。请参阅文档 here.

所以,你可以说 Writer::append 并得到一个函数 Writer.(Char) -> Writer,但是使用 writer 实例并说 writer::append 得到一个函数 (Char) -> Writer暂不支持。

从 Kotlin 1.1 开始 writer::append 是完全有效的 bound callable reference

但是,您仍然不能写 string.forEach(writer::append) 因为 Writer#append 方法 returns 一个 Writer 实例并且 forEach 需要一个 returns 的函数Unit.

我正在使用 Kotlin 1.3,在引用 Java 方法时我遇到了一个非常相似的错误。正如 中提到的,制作一个 lambda 并将其传递给 forEach 方法是一个不错的选择。

key.forEach { writter.append(it) }

成为itthe implicit name of a single parameter.