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%Irgendwelche Gedanken werden geschätzt.
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 .
Tags und Links java inheritance type-inference