簡體   English   中英

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)}

這是一個已知的錯誤。

看到這個問題

解決方法是使用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中添加此功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM