根据JLS
第15.27节:
如果lambda表达式出现在程序中的某个环境中,而不是赋值上下文(第5.2节),调用上下文(第5.3节)或强制转换上下文(第5.5节),则这是编译时错误。
也可以在
return语句中使用lambda表达式。
然后,我们可以用四种不同的方式重写您的示例:
通过创建分配上下文:
Function<Boolean, Boolean> function = p -> p;
boolean x = function.apply(true);
通过创建调用上下文:
foobar(p -> p); private static void foobar(Function<Boolean, Boolean> function) { boolean x = function.apply(true); }通过创建转换上下文:
boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
使用一条
return
语句:
boolean x = function().apply(true); private static Function<Boolean, Boolean> function() { return p -> p; }同样,在这个简单的示例中,整个lambda表达式可以重写为:
UnaryOperator<Boolean> function = UnaryOperator.identity();



