Usando Java Void type en Kotlin

Tengo una function Java que requiere que pase un parámetro Void debido a restricciones de tipo. Algo como:

 void foo(Void v) { // do something } 

Ahora me gustaría llamar a esa function de Kotlin, pero el comstackdor se queja de que los types no son compatibles cuando lo llamo con null como lo haría desde Java:

 foo(null); 

¿Qué debo pasar a esa function para que el comstackdor de Kotlin la acepte?

Actualización: el código real se ve así:

 fun foo(): Map<String, Void> { return mapOf(Pair("foo", null)) } 

Actualización: usar null as Void realidad tampoco funciona:

 kotlin.TypeCastException: null cannot be cast to non-null type java.lang.Void 

No he tenido la oportunidad de probarlo, pero basado en su exception, el siguiente código debería funcionar:

 fun foo(): Map<String, Void?> { return mapOf(Pair("foo", null)) } 

Explicación: Map<String, Void> espera que no haya valores null . Pero estás creando un Pair con un valor null . La gente está sugiriendo invocar el método java que requiere Void con null que debería funcionar hasta donde yo sepa, pero para el constructor Pair que estás usando definitivamente necesitas decir explícitamente que el Map puede contener valores nulos.

Editar: mi mal por necro-ing, no pensé en la date hasta después. 🙁

Intenta actualizar tu complemento de Kotlin. Estoy en '1.0.0-beta-1103-IJ143-27' y el siguiente código se comstack sin quejas / advertencias:

 // On Java side public class Test { public void test(Void v) { } } // On Kotlin side fun testVoid() { Test().test(null) } 

Había ideado 2 soluciones, ambas comstackdas (en Kotlin 1.1.2-3).

Puede necesitar esto (sin cambiar la firma de su método, pero no funciona):

 fun foo(): Map<String, Void> { return mapOf(Pair("foo", throw Exception("Why? Why you call me"))) } 

O algo así como (cambiar su firma y funciona):

 fun foo(): Map<String, Void?> { return mapOf(Pair("foo", null as Void?)) } 

Buena suerte.

  • Retorno de la function en Kotlin como una línea cuando el object es nulo
  • Script de Kotlin como configuration de Gradle - pase los parameters que no usan la extensión
  • ¿Cómo se representa @Relation anidada con Android Room?
  • kotlin - reino y package
  • Firebase: ¿manera limpia de usar campos enum en Kotlin / Java?
  • replicar la function de hash de javascript a java / kotlin
  • Kotlin, Mockito y Android Test Instrumentation. La propiedad de Lateinit no se ha inicializado
  • Retrofit2 y kotlin
  • kotlin coroutine val vs diversión
  • Carácter de signo de dólar en strings
  • ¿Puede Delegates.observable () ser serializable?