Java 8 Lambdas执行

问题描述

根据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();

解决方法

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

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

现在,我收到以下错误:

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

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”