Java 8 lambdas执行

我怎样才能在Java 8中做这样的事情?

boolean x = ((boolean p)->{return p;}).apply(true); 

现在我收到以下错误:

此表达式的目标类型必须是function接口

根据JLS 第15.27节 :

如果lambda表达式出现在除分配上下文(第5.2节),调用上下文(第5.3节)或转换上下文(第5.5节)之外的某个位置的程序中,则为编译时错误。

也可以在return语句中使用lambda表达式。

然后我们可以用四种不同的方式重写你的例子:

  • 通过创建分配上下文:

     Function function = p -> p; boolean x = function.apply(true); 
  • 通过创建调用上下文:

     foobar(p -> p); private static void foobar(Function function) { boolean x = function.apply(true); } 
  • 通过创建投射上下文:

     boolean x = ((Function) p -> p).apply(true); 
  • 使用return语句:

     boolean x = function().apply(true); private static Function function() { return p -> p; } 

此外,在这个简单的示例中,整个lambda表达式可以重写为:

 UnaryOperator function = UnaryOperator.identity();