Obteniendo el error "Tipos incompatibles" cuando se usa el código generado a partir de una class de datos Kotlin

Si descompilo el file .class generado por data class State(val b: List<Array<Int>>) entonces obtengo el siguiente código de Java:

 public final class State { private final List<? extends Integer[]> b; public State(List<? extends Integer[]> b) { this.b = b; } public final List<Integer[]> getB() { return this.b; } // ... } 

Si copio / pego este código java en mi IDE (Intellij 15), aparece el siguiente error de compilation en el método getB() :

 Incompatible types. Requinetworking: List<Integer[]> Found: List<? extends Integer[]> 

¿Que me estoy perdiendo aqui? ¿Cómo puede el código generado por Kotlin hacer esto pero no mi copy / versión pegada?

En general, cuando javac carga un file .class, no realiza una verificación de tipo completa del código en esa class; Confiará en las firmas genéricas especificadas en el bytecode. Debido a eso, otros lenguajes JVM pueden generar firmas que javac mismo se negaría a generar.

En este caso específico, los comodines generados por Kotlin beta 4 no tienen sentido ( Integer[] es una class final, entonces ? extends Integer[] es inútil), por lo que la versión de desarrollo actual no genera ningún comodín en este ejemplo.

En términos más generales, nuestro objective es garantizar que las API escritas en Kotlin sean fáciles de consumir a partir del código Java, y para lograr esto, Kotlin le permite controlar dónde exactamente genera comodines. Esto se describe aquí en "Comodines de Java".

  • Evite que Kotlin fuerce a Java a ver un tipo de comodín
  • Los types comodín generics no son compatibles
  • Cómo representar múltiples types (types de unión) al apuntar a JavaScript
  • ¿Por qué necesita la class Preference <T> ser envuelta con object?
  • Constructor secundario de Kotlin de supervalor de twig condicional de class extendida
  • Pase listOf (mapOf (x, y, z)) como parámetro en Kotlin
  • Crear paginador de visualización mediante progtwigción en la barra de tabs, pero el contenido de paginador de vista se desplaza por las tabs
  • ¿Cómo usar Kotlin en una aplicación de Android existente?
  • Android solo estableceStackFromEnd solo si RecycleView / List es más grande que la pantalla
  • Acceder a las properties de una tarea en gradle kotlin
  • ¿Por qué usar Scopes y las annotations de Singleton en Dagger2 con kotlin provoca un error al comstackr?