【发布时间】:2016-10-31 23:36:16
【问题描述】:
根据我对 java 8 lambda 表达式的理解,如果我们不在大括号中的“->”之后包含代码,则该值将被隐式返回。但在下面的例子中,forEach 方法需要 Consumer 并且表达式返回值,但编译器在 Eclipse 中没有给出错误。
List<StringBuilder> messages = Arrays.asList(new StringBuilder(), new StringBuilder());
messages.stream().forEach(s-> s.append("helloworld"));//works fine
messages.stream().forEach((StringBuilder s)-> s.append("helloworld")); //works fine
messages.stream().forEach(s-> s); // doesn't work , Void methods cannot return a value
messages.stream().forEach(s-> s.toString()); // works fine
messages.stream().forEach(s-> {return s.append("helloworld");}); // doesn't work , Void methods cannot return a value
messages.stream().forEach((StringBuilder s)-> {return s.append("helloworld");}); // doesn't work , Void methods cannot return a value
s.append 返回 StringBuilder 和 s.toString() 返回 String 但 lambda 将其视为 void。
我在这里缺少什么?为什么我们在对象上调用方法时编译器没有报错?
【问题讨论】:
标签: java foreach lambda functional-programming java-8