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

  • ¿Puedo get una KFunction de una variable del tipo de function en Kotlin?
  • Kotlin: isAssignableFrom y reflexiones del tipo de reflexión
  • Configurar la reflexión de kotlin, class.java no funciona
  • ¿Es seguro llamar a kclass.memberProperties en un object desconocido (Cualquiera)?
  • Verificar si la function es extensión
  • Usar reflexión para pasar y modificar una primitiva sin usar matriz
  • Kotlin: comparar los valores de propiedad de diferentes objects objective con (fuera) reflexión
  • instancia :: class.java vs. instance.javaClass
  • ¿Cómo cambiar un campo de miembro con la reflexión de Kotlin?
  • Determinar si una instancia es una instancia de una class de datos
  • Acceda al tipo de delegado de Kotlin sin una instancia