Kotlin:方法参考不起作用?

时间:2015-09-16 01:33:33

标签: kotlin

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

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

string.forEach(writer::append);

但在Kotlin中使用相同的语法不起作用,因为:

enter image description here

3 个答案:

答案 0 :(得分:20)

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

所以,你可以说Writer::append并获得一个函数Writer.(Char) -> Writer,但是获取writer个实例并说writer::append来获取函数(Char) -> Writer不是目前支持。

答案 1 :(得分:0)

从Kotlin 1.1 set开始是一个非常有效的bound callable reference

但是,您仍然无法编写writer::append,因为string.forEach(writer::append)方法返回一个Writer#append实例,并且Writer需要一个返回forEach的函数。

答案 2 :(得分:0)

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

key.forEach { writter.append(it) }

成为it the implicit name of a single parameter.