所以我正在使用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)}
答案 0 :(得分:2)
这是一个已知的错误。
请参阅此issue。
解决方法是改为使用Lambda。 e.g。
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 :(得分:1)
从技术上讲,这不是一个错误。我很早就问过他们是否打算在版本1中的实例上支持方法引用,并且我被告知他们很可能不会。
方法引用只能用于类和模块,而不能用于实例。来自Java 8,这似乎是一个大问题,但考虑到他们的lambda语法的潜在简洁性,它真的不是。
更新:他们计划在1.1
中添加此功能