是否有不能作为方法引用的 lambda 函数

is there a lambda function that cannot be a method reference

在我公司的一次演讲中,我建议将任何复杂的 lambda 转换为方法引用(更具可读性以及更好的调试和测试),并被问及是否总是可行。

我搜索过,但没有找到无法用方法引用替换的 lambda。

我说的对吗? (lambda 总是可以用方法引用替换)

方法引用无法捕获变量。因此,捕获的 lambda 不能直接转换为方法引用。例如,

int x = 1;
numbers.replaceAll(n -> n + x);

在某些情况下,如果只捕获一个变量,则可以将 lambda 转换为捕获变量的方法引用。例如,

String greeting = "Hello, ";

people.replaceAll(name -> greeting + name);

可以转换为方法引用如

people.replaceAll(greeting::concat);