1

所以我正在使用 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)}
4

2 回答 2

2

这是一个已知的错误。

看到这个问题

一种解决方法是改用 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
于 2015-06-25T08:30:10.897 回答
1

从技术上讲,这不是错误。我很早就问他们是否计划在版本 1 中支持对实例的方法引用,我被告知他们很可能不会。

方法引用只能用于类和模块,不能用于实例。来自 Java 8,这似乎很重要,但考虑到它们的 lambda 语法潜在的简洁性,它确实不是。

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

于 2016-01-06T04:07:09.043 回答