This question already has answers here:
What is the equivalent lambda expression for System.out::println
(2个答案)
Function pointer to String method in Java
(3个答案)
2年前关闭。
如果将光标放在IntelliJ IDEA中的绑定接收器方法引用(例如
此代码显示方法引用和lambda不相等。该代码在每行上打印不同的值:“ a”和“ b”。我的问题是:这种方法引用的正确lambda等效项是什么?
它从字面上变为
(2个答案)
Function pointer to String method in Java
(3个答案)
2年前关闭。
如果将光标放在IntelliJ IDEA中的绑定接收器方法引用(例如
str::toUpperCase
)上,然后按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/
10-09 19:13