Java 8 lambdas执行

时间:2015-09-03 19:13:21

标签: java lambda java-8 functional-interface

如何在Java 8中执行此类操作?

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

现在我收到以下错误:

  

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

1 个答案:

答案 0 :(得分:22)

根据JLS section 15.27

  

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

也可以在return statement中使用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();