Die Einschränkung von Arrays.asList () ist nicht wahr in Thinking in Java 4th Edition [geschlossen]

8

In diesem Buch steht:

  

Eine Begrenzung von Arrays.asList () ist, dass es eine optimale Schätzung darstellt   der resultierende Typ der Liste und achtet nicht auf das, was Sie tun   weisen es zu.

Das Buch ist Denken in Java Von Bruce Eckel

Der folgende Code funktioniert jedoch einwandfrei, im Gegensatz zu Code, der in dieser Buchseite 280

angezeigt wird %Vor%

Java 1.8, IntelliJ, Windows 7

Irgendwelche Gedanken werden geschätzt.

    
Xuzheng Wang 10.03.2016, 07:20
quelle

1 Antwort

8

Dieser Code schlägt in Java-7 fehl, kompiliert jedoch in Java-8. Mit javac 7u80 sehe ich:

%Vor%

Die Typinferenz in Java-8 wurde signifikant verbessert. Davor wurde der Typ für jeden Unterausdruck ausschließlich auf Basis der Analyse dieses Unterausdrucks abgeleitet, sodass der Typ von Arrays.asList(new Light(), new Heavy()) unabhängig vom umgebenden Kontext bekannt sein musste. In Java-8 kann der umgebende Kontext den Ausdruckstyp berücksichtigen.

In der Java-Sprachspezifikation Version 8 gibt es ein ganz neues Kapitel für die Typschlussfolgerung. Es ist nicht sehr einfach zu lesen, aber zu meinem Verständnis, anstatt den konkreten Typ jedem Unterausdruck eine Menge von Einschränkungen wird zugewiesen. In unserem Fall sind die Einschränkungen Light <: T && Heavy <: T (hier wird kein genauer Typ abgeleitet). Als nächstes wird der Reduktionsprozess durchgeführt, der den Satz von Beschränkungen auf den Satz von Grenzen reduziert, wobei Einschränkungen der Ausdruckskompatibilität .

    
Tagir Valeev 10.03.2016, 07:46
quelle