简单lambda表达式代码上的“AssignmentOperator Expression”错误

时间:2016-12-02 00:03:23

标签: java lambda

我现在正在学习如何使用lambda表达式,并且我已经看到了一些简单示例的教程:

(int x) -> x + 5;

但是我的编译器显示了这个错误:

Syntax error, insert "AssignmentOperator Expression" to complete Expression

我忘记了什么吗?

4 个答案:

答案 0 :(得分:6)

必须始终将Lambda表达式分配给Functional Interafces 的引用类型(也称为单个抽象方法接口)。事实上,它们提供了详细的匿名类(使用单一方法)实现的快捷方式。

因此,简单来说,Lambda表达式=抽象方法实现(功能接口)。

例如,您的表达式可以分配给以下功能界面:

{{1}}

答案 1 :(得分:3)

Lambdas是不能用作语句的表达式。来自JLS8 §15.27

  

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

考虑这个例子:

// functional interface
interface Operator
{  
  int apply(int a, int b);
}  
// method that expects instance of the interface
int calculate(int a, int b, Operator op)
{  
  return op.apply(a, b);
}  
// lambda expression
Operator plus = (a, b) -> a + b; 
// method call
calculate(40, 2, plus);

答案 2 :(得分:2)

如上所述,问题是你没有对lambda做任何事情。这意味着:

  • 编译器不知道哪个函数接口(例如java.util.function.Function)可以推断为lambda的类型。
  • 您的代码行“不是语句”(编译器经常发出的另一条错误消息)。这类似于:

"Hello";

哪个是无效的Java。

答案 3 :(得分:0)

lambda表达式不能在Java中单独存在,它需要与功能接口相关联。

public interface myinterface
    {
        int mymethod(int a,int b);
    }

    public static void main(String[] args)
    {                     
            myinterface my = ( a,b ) -> { 
                int mul = a*4;
                int add = a+b;
                return add; };

    }

注意:这是您第一次和最后一次看到没有关键字“实施” 的接口的实现。

试玩::尝试向接口myinterface添加新的虚拟方法,您将看到代码将无法编译,因此表明引用只能由< strong>功能界面,而不是常规界面。

public interface myinterface
    {
        int mymethod(int a,int b);
        int newmethod(String j);
    }

    public static void main(String[] args) {
            myinterface my = ( a,b ) -> { 
            int mul = a*4;
            int add = a+b;
            return add;
        };
  

编译错误:此表达式的目标类型必须为   功能界面