Laufzeitbewertung von Ausdrücken in Java-Methodenreferenzen

8

Im Abschnitt Laufzeitauswertung von Methodenreferenzen der Java Language Specification wird erwähnt, dass:

  

Zur Laufzeit ist die Auswertung eines Methodenreferenzausdrucks ähnlich der Auswertung eines Klassenexemplar-Erstellungsausdrucks, sofern die normale Vervollständigung einen Verweis auf ein Objekt erzeugt. Die Auswertung eines Methodenreferenzausdrucks unterscheidet sich vom Aufruf der Methode selbst.

     

Wenn der Methodenreferenzausdruck mit einem Ausdrucksname oder einem primären beginnt, wird dieser Unterausdruck ausgewertet. Wenn der Teilausdruck zu null ausgewertet wird, wird ein NullPointerException ausgelöst, und der Methodenreferenzausdruck wird abrupt beendet. Wenn der Unterausdruck abrupt abgeschlossen wird, wird der Methodenreferenzausdruck aus dem gleichen Grund abrupt beendet.

Und Ausdrucksname und Primär sind in Methodenreferenz Ausdruckssyntax :

%Vor%      
%Vor%   

Ich war an dem hervorgehobenen Teil interessiert und wollte das erwähnte Verhalten mit dem folgenden Code testen:

%Vor%

Die Zeile foo(p::getName) löst jedoch keine NullPointerException aus. Missverstehe ich das obige Zitat von der JLS? Wenn ja, könnte jemand mehr die Bedeutung des obigen Zitats erklären oder ein Beispiel geben, wo es auftreten würde?

    
manouti 14.12.2017, 15:24
quelle

1 Antwort

7

Oh verdammt! Das ist ein Eklipsen-Fehler ( ECJ ) , der mit javac/java fehlschlägt (ich habe versuchte hier 9 im Beispiel, aber das Gleiche passiert in 8):

%Vor%     
Eugene 14.12.2017, 15:34
quelle