首頁 >Java >java教程 >方法引用何時不等於 Lambda 表達式?

方法引用何時不等於 Lambda 表達式?

DDD
DDD原創
2024-11-04 00:29:30298瀏覽

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

方法引用與Lambda 表達式:探索System.out::println 的等效性

使用System.out 等方法引用時::println,函數首先計算System.out 並捕獲lambda 表達式中的結果值。例如,此方法所引用的lambda 等效項為:

<code class="java">Consumer<Integer> consumer = System.out::println;</code>

此lambda 表達式的行為與以下程式碼類似:

<code class="java">Consumer<Integer> consumer = new Consumer<Integer>() {
    @Override
    public void accept(Integer i) {
        System.out.println(i);
    }
};</code>

但是,方法引用System.out: : println 比lambda 表達式有一個優勢,因為它總是在編譯時計算System.out。對於 lambda 表達式,每次呼叫方法時都會計算 System.out。

為了確保與方法引用完全等效,必須使用以下程式碼:

<code class="java">PrintStream printStream = Objects.requireNonNull(System.out);
Consumer<Integer> consumer = o -> printStream.println(o);</code>

這裡,printStream 是一個捕獲System.out 值的變量,保證System.out 的任何後續更改都不會影響該消費者。

以上是方法引用何時不等於 Lambda 表達式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn