Kotlin:双冒号(反射)运算符
Kotlin: double colon (reflection) operator over
所以我在使用 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)}
这是一个已知错误。
看到这个issue。
解决方法是改用 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 中添加此功能
所以我在使用 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)}
这是一个已知错误。
看到这个issue。
解决方法是改用 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 中添加此功能