Java 8 lambdas执行

Java 8 lambdas执行,java,lambda,java-8,functional-interface,Java,Lambda,Java 8,Functional Interface,在Java8中,我如何做这样的事情 boolean x = ((boolean p)->{return p;}).apply(true); 现在我得到了以下错误: 此表达式的目标类型必须是函数接口 根据JLS: 如果lambda表达式出现在程序中分配上下文(§5.2)、调用上下文(§5.3)或转换上下文(§5.5)以外的某个位置,则为编译时错误 也可以在中使用lambda表达式 然后,我们可以用四种不同的方式重写您的示例: 通过创建分配上下文: Function<Boolean,

在Java8中,我如何做这样的事情

boolean x = ((boolean p)->{return p;}).apply(true);
现在我得到了以下错误:

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

根据JLS:

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

也可以在中使用lambda表达式

然后,我们可以用四种不同的方式重写您的示例:

  • 通过创建分配上下文:

    Function<Boolean, Boolean> function = p -> p;
    boolean x = function.apply(true);
    
此外,在这个简单的示例中,整个lambda表达式可以重写为:

UnaryOperator<Boolean> function = UnaryOperator.identity();
unarymoperator函数=unarymoperator.identity();

我看到的示例没有使用{},因为它是一个单独的语句。同样的事情,在返回p附近没有{}。我认为这不是问题所在。您的错误在于假设
函数
具有任何特殊状态,以便lambda的类型将自动强制进入该函数。您的表达式实际上没有目标类型约束。您可以通过告诉编译器lambda的类型来修复代码:boolean x=((函数)p->p)。apply(true);
boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
boolean x = function().apply(true);

private static Function<Boolean, Boolean> function() {
    return p -> p;
}
UnaryOperator<Boolean> function = UnaryOperator.identity();