Por que estou recebendo um AssertionError ao atribuir Arrays.asList () para var diretamente?

Estou tentando entender a inferência de tipo de variável local no Java 10.

  1. O código abaixo funciona perfeitamente durante a compilation e o tempo de execução:

    List list1 = Arrays.asList(1L, 2.0F, "3"); var list2 = list1; 
  2. No entanto, esta linha lança um erro de compilation:

     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>

Eu realmente não entendo porque o segundo caso está errado, mas não o primeiro caso. Porque eu espero que o compilador inferiria o tipo de list1 e trataria list2 e list3 da mesma forma. Desde já, obrigado.

Este é um bug no compilador Java 10: https://bugs.openjdk.java.net/browse/JDK-8199910

Só é reproduzido quando o javac é chamado com um sinalizador -g .

Soluções possíveis:

  1. Não use o sinalizador -g
    • Se você usa IDEA: Configurações → Compilação, Execução, Implantação → Compilador → Compilador Java → Desmarque a opção “Gerar informações de debugging”
  2. Não use var com tipos de interseção (use tipos explícitos):
    • Listlist = Arrays.asList(1L, 2.0F, "3");
    • var list = Arrays.asList(1L, 2.0F, "3");
  3. Use o Eclipse que possui seu próprio compilador

UDPATE:

O bug foi corrigido no JDK 10.0.2 .

Este é um bug do openjdk, veja isto :

Javac deve ignorar tipos não denotable no atributo LocalVariableTypeTable