Methodenreferenz vs. Lambda-Ausdruck: Untersuchung der Äquivalenz von System.out::println
Bei Verwendung einer Methodenreferenz wie System.out ::println wertet die Funktion zunächst System.out aus und erfasst den resultierenden Wert in einem Lambda-Ausdruck. Das Lambda-Äquivalent dieser Methodenreferenz wäre beispielsweise:
<code class="java">Consumer<Integer> consumer = System.out::println;</code>
Dieser Lambda-Ausdruck verhält sich ähnlich wie der folgende Code:
<code class="java">Consumer<Integer> consumer = new Consumer<Integer>() { @Override public void accept(Integer i) { System.out.println(i); } };</code>
Die Methodenreferenz System.out lautet jedoch: :println bietet gegenüber dem Lambda-Ausdruck einen Vorteil, da er System.out immer zur Kompilierungszeit auswertet. Im Fall des Lambda-Ausdrucks wird System.out bei jedem Aufruf der Methode ausgewertet.
Um eine genaue Entsprechung zur Methodenreferenz sicherzustellen, muss der folgende Code verwendet werden:
<code class="java">PrintStream printStream = Objects.requireNonNull(System.out); Consumer<Integer> consumer = o -> printStream.println(o);</code>
Hier ist printStream eine Variable, die den System.out-Wert erfasst und garantiert, dass sich alle nachfolgenden Änderungen an System.out nicht auf diesen Verbraucher auswirken.
Das obige ist der detaillierte Inhalt vonWann ist eine Methodenreferenz nicht äquivalent zu einem Lambda-Ausdruck?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!