Kotlin: doble operador de colon (reflexión) sobre

Así que estaba trabajando con VertX Web, tratando de hacer que funcione con Kotlin. Hay un enrutador y tienes que decir algo como

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

Pero no funciona. ¿Qué estoy haciendo mal? Cuando lo uso en las classs definidas de Kotlin, se comporta normalmente. ¿Se hace a propósito?

Lo que sea, tuve que hacerlo manualmente así

 server.requestHandler{router.accept(it)} 

Es un error conocido.

Mira este problema .

Una solución alternativa es usar una Lambda en su lugar. p.ej

 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 

Técnicamente no es un error. Pregunté desde el principio si planeaban respaldar las references a los methods en las instancias de la versión 1, y me dijeron que lo más probable es que no lo hicieran.

Las references a los methods solo se pueden usar desde classs y modules, no desde instancias. Procedente de Java 8, esto parece ser un gran problema, pero considerando la concisión potencial de su syntax lambda, realmente no lo es.

ACTUALIZACIÓN: Planean agregar esta característica en 1.1

  • La igualdad de class Kotlin falla
  • Kotlin: ¿Cómo puedo usar la reflexión en los packages?
  • Manera idiomática de invocar methods a través de la reflexión en Kotlin
  • Kotlin: comparar los valores de propiedad de diferentes objects objective con (fuera) reflexión
  • ¿Puedo usar kotlin.reflect para get un valor de un campo
  • Kotlin: ¿Cómo se accede a los methods get y setValue de un delegado?
  • ¿Cómo obtengo el valor de una propiedad con reflection?
  • Kotlin: ¿Es aquí una forma inteligente de lanzar NotImplementedError para todos los methods de una class?
  • Los literales de class Kotlin con el lado izquierdo vacío aún no son compatibles.
  • Usar reflexión para pasar y modificar una primitiva sin usar matriz
  • Kotlin language obtiene class en time de ejecución