Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否存在不能作为方法引用的lambda函数_Java_Lambda_Java 8_Method Reference - Fatal编程技术网

Java 是否存在不能作为方法引用的lambda函数

Java 是否存在不能作为方法引用的lambda函数,java,lambda,java-8,method-reference,Java,Lambda,Java 8,Method Reference,在我在公司的一次演讲中,我建议将任何复杂的lambda转换为方法引用(更具可读性,更好的调试和测试),并被问及是否总是可能的 我搜索了,但找不到无法用方法引用替换的lambda 我说得对吗?(lambda始终可以替换为方法引用)方法引用无法捕获变量。因此,捕获lambda不能直接转换为方法引用。比如说, int x = 1; numbers.replaceAll(n -> n + x); String greeting = "Hello, "; people.replaceAll(na

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

我搜索了,但找不到无法用方法引用替换的lambda


我说得对吗?(lambda始终可以替换为方法引用)

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

int x = 1;
numbers.replaceAll(n -> n + x);
String greeting = "Hello, ";

people.replaceAll(name -> greeting + name);
在某些情况下,如果只捕获一个变量,则可能会将lambda转换为捕获变量上的方法引用。比如说,

int x = 1;
numbers.replaceAll(n -> n + x);
String greeting = "Hello, ";

people.replaceAll(name -> greeting + name);
可以转换为方法引用,如下所示:

people.replaceAll(greeting::concat);

对不起,这个问题对我来说毫无意义。你能用一个代码示例解释一下吗?如果lambda正在捕获局部变量,它就不能转换为方法引用。
intx=1;numberList.replaceAll(n->n+x)此外,您的代码将不会编译。你不能使用方法引用作为
S.o.println
@TalJoffe-1)如果Tunaki否决了你的问题,那不关你的事。2) 如果他这样做了,那么他的评论就是一个合理的解释。他认为你的问题需要一个例子,这样人们才能理解。(我不同意,但他有权发表自己的意见,也有权投反对票。算了吧!)@Tal Joffe:只要重新编辑一下,也许,无论谁投了反对票,都会撤回反对票。或者你那个更好的问题得到更多的选票。无论哪种情况,斯蒂芬都是对的,不要浪费时间去想一次否决票…