Kotlin:双冒号(反射)运算符结束

所以我正在与VertX Web合作,试图让它与Kotlin合作。 有一个路由器,你不得不说

val vertx = Vertx.vertx() val server = vertx.createHttpServer() val router = Router.router(vertx) server.requestHandler(router::accept) 

但它不起作用。 我究竟做错了什么? 当我在Kotlin定义的类上使用它时,它表现正常。 是故意的吗?

无论如何,我必须像这样手动完成

 server.requestHandler{router.accept(it)} 

这是一个已知的错误。

看到这个问题 。

解决方法是使用Lambda。 例如

 class Foo { fun doWork(work: () -> Unit) { work() } } class Bar (val text: String) { fun printText() { println("${text}") } } val foo: Foo = Foo() val bar: Bar = Bar("Hello Kotlin!") foo.doWork(bar::printText) //Fails foo.doWork({ bar.printText() }) //Is working 

从技术上讲,这不是一个错误。 我早就问过他们是否打算在版本1中支持方法引用,而且我被告知他们很可能不会。

方法引用只能从类和模块中使用,而不能从实例中使用。 来自Java 8,这似乎是一个大问题,但考虑到他们的lambda语法的潜在简洁性,它确实不是。

更新:他们计划在1.1中添加此功能