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".

  • @DataJpaTest y @Async El método CRUDRepository no funciona en set
  • ¿No se necesita NotNull en Kotlin?
  • Android Studio / Kotlin: Error de Gradle: no se puede encontrar el método compile () para los arguments
  • Patrón Regex Kotlin
  • Cómo consultar Realm en el background Subprocess usando RxJava2
  • cómo hacer que el subset múltiple sea constante en kotlin
  • Objeto POJO para esta respuesta XML en kotlin
  • ¿Cómo usar una function llamada "val ()" en Kotlin? / extender classs externas de JS
  • Kotlin - MainActivity extiende AppCompatActivity, function onRequestPermissionsResult no encontrada y no puede ser anulada
  • ¿Propiedades volátiles en Kotlin?
  • ¿Hay alguna manera de tener un file privado constante en Kotlin?