有没有一种Lambda函数不能成为方法引用?

5
在我在公司的一次讲座中,我建议将任何复杂的lambda表达式转换为方法引用(更易读、更易于调试和测试),并被问及是否总是可行。
我搜索了一下,但没有找到不能用方法引用替换的lambda表达式。
我的观点正确吗?(lambda表达式总是可以用方法引用替换)

1
抱歉,我无法理解您的问题。您能否提供一些代码示例来解释一下? - Tunaki
3
如果lambda表达式捕获了局部变量,它就无法转换为方法引用。 - Misha
2
int x = 1; numberList.replaceAll(n -> n + x); 这段代码意思是将列表中的所有数字加上1。此外,您的代码无法编译。您不能将方法引用作为参数传递给 S.o.println - Misha
2
@TalJoffe - 1) 如果 Tunaki 给你的问题点了踩,那与你无关。2) 如果他真的这么做了,那么他的评论是一个合理的解释。他认为你的问题需要一个例子,以便人们能够理解它。(我不同意,但他有权发表自己的观点并且有权进行点踩。接受现实吧!) - Stephen C
1
@Tal Joffe:重新编辑你的问题,也许那些点踩的人会撤销他们的投票。或者你的改进后的问题会获得更多点赞。无论哪种情况,Stephen是对的,不要浪费太多时间思考单个点踩的事情。 - Holger
显示剩余5条评论
1个回答

11

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

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

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

String greeting = "Hello, ";

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

可以转换为方法引用,如下:

people.replaceAll(greeting::concat);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接