Heim >Java >javaLernprogramm >Wann ist eine Methodenreferenz nicht äquivalent zu einem Lambda-Ausdruck?

Wann ist eine Methodenreferenz nicht äquivalent zu einem Lambda-Ausdruck?

DDD
DDDOriginal
2024-11-04 00:29:30298Durchsuche

When is a Method Reference Not Equivalent to a Lambda Expression?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn