Heim > Java > javaLernprogramm > Hauptteil

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

DDD
Freigeben: 2024-11-04 00:29:30
Original
257 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage