我现在正在学习如何使用lambda表达式,并且我已经看到了一些简单示例的教程:
(int x) -> x + 5;
但是我的编译器显示了这个错误:
Syntax error, insert "AssignmentOperator Expression" to complete Expression
我忘记了什么吗?
答案 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做任何事情。这意味着:
"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;
};
编译错误:此表达式的目标类型必须为 功能界面