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.
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;
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 de openjdk, mira https://bugs.openjdk.java.net/browse/JDK-8199910 :
Javac debe omitir los tipos no denotable en el atributo LocalVariableTypeTable
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:
- 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"
- 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");
-
- Usa Eclipse que tiene su propio compilador.
UDPATE:
El error fue corregido en JDK 10.0.2 .