gpt4 book ai didi

java - 方法引用 ↔ lambda 等价

转载 作者:行者123 更新时间:2023-11-30 05:57:57 30 4
gpt4 key购买 nike

如果将光标放在绑定(bind)接收器方法引用上,例如 str::toUpperCase在 IntelliJ IDEA 中并按 Alt+Enter,它会建议将其替换为 lambda。如果继续,它会将方法引用更改为 () -> str.toUpperCase() 。这可能是 IntelliJ IDEA 中的一个错误,尽管我怀疑这也是其他 IDE 中的常见错误。为什么?嗯,它并不总是等价的。拿下面这个小谜题来说吧。以下代码的输出是什么?

import java.util.function.Supplier;

public class Scratch {

private static String str;

public static void main(String[] args) {
str = "a";
Supplier<String> methodref = str::toUpperCase;
Supplier<String> lambda = () -> str.toUpperCase();

str = "b";
System.out.println(methref.get());
System.out.println(lambda.get());
}
}

此代码显示方法引用和 lambda 不等效。该代码在每一行打印不同的值:“a”和“b”。我的问题是:这种类型的方法引用的正确 lambda 等价物是什么?

最佳答案

对于您的供应商设置,答案是:没有等效的。

当你写下:

str = "a";
Supplier<String> methodref = str::toUpperCase;

它实际上变成了"a"::toUpperCase(实际编译)。

关于java - 方法引用 ↔ lambda 等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52832698/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com