java arrays exception type-inference java-10

java - ¿Por qué obtengo un error de aserción al asignar Arrays.asList() a var directamente?



exception type-inference (2)

Estoy tratando de entender la inferencia de tipo de variable local en Java 10.

  1. El siguiente código funciona perfectamente durante la compilación y el tiempo de ejecución:

    List list1 = Arrays.asList(1L, 2.0F, "3"); var list2 = list1;

  2. Sin embargo, esta línea arroja un error de compilación:

    var list3 = Arrays.asList(1L, 2.0F, "3");

    Error:java: java.lang.AssertionError: Unexpected intersection type: java.lang.Object&java.io.Serializable&java.lang.Comparable<? extends java.lang.Object&java.io.Serializable&java.lang.Comparable<?>>

Realmente no entiendo por qué el segundo caso es incorrecto, pero no el primer caso. Porque espero que el compilador infiera el tipo de list1 y trate la list2 y la list3 del mismo modo. Gracias por adelantado.



Este es un error en el compilador de Java 10: https://bugs.openjdk.java.net/browse/JDK-8199910

Solo se reproduce cuando se llama a javac con una bandera -g .

Posibles soluciones:

  1. No use la bandera -g
    • Si usa IDEA: Configuración → Compilación, Ejecución, Despliegue → Compilador → Compilador Java → Desmarque "Generar información de depuración"
  2. No use var con tipos de intersección (use tipos explícitos):
    • List<Object> list = Arrays.asList(1L, 2.0F, "3");
    • var list = Arrays.<Object> asList(1L, 2.0F, "3");
  3. Usa Eclipse que tiene su propio compilador.

UDPATE:

El error fue corregido en JDK 10.0.2 .