首页 >Java >java教程 >方法引用何时不等于 Lambda 表达式?

方法引用何时不等于 Lambda 表达式?

DDD
DDD原创
2024-11-04 00:29:30316浏览

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