Java 8 lambdas execution

守給你的承諾、 提交于 2019-12-30 05:59:48

问题


How can I do something like this in Java 8?

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

Right now I get the following error:

The target type of this expression must be a functional interface


回答1:


As per the JLS section 15.27:

It is a compile-time error if a lambda expression occurs in a program in someplace other than an assignment context (§5.2), an invocation context (§5.3), or a casting context (§5.5).

It is also possible to use a lambda expression in a return statement.

We can then rewrite your example in four different ways:

  • By creating an assignment context:

    Function<Boolean, Boolean> function = p -> p;
    boolean x = function.apply(true);
    
  • By creating an invocation context:

    foobar(p -> p);
    
    private static void foobar(Function<Boolean, Boolean> function) {
        boolean x = function.apply(true);
    }
    
  • By creating a casting context:

    boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
    
  • Using a return statement:

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

Also, in this simple example, the whole lambda expression can be rewritten as:

UnaryOperator<Boolean> function = UnaryOperator.identity();


来源:https://stackoverflow.com/questions/32383699/java-8-lambdas-execution

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!