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) }
我似乎无法在 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 方法时我遇到了一个非常相似的错误。正如 forEach
方法是一个不错的选择。
key.forEach { writter.append(it) }