我現在學習的λ,我已經看到了一些教程,並想出了一個簡單的例子:「AssignmentOperator表達」錯誤
(int x) -> x + 5;
但我的編譯器顯示此錯誤:
Syntax error, insert "AssignmentOperator Expression" to complete Expression
我忘了什麼嗎?
我現在學習的λ,我已經看到了一些教程,並想出了一個簡單的例子:「AssignmentOperator表達」錯誤
(int x) -> x + 5;
但我的編譯器顯示此錯誤:
Syntax error, insert "AssignmentOperator Expression" to complete Expression
我忘了什麼嗎?
Lambda表達式總是必須分配給功能性Interafces(也稱爲單抽象方法接口)的引用類型。事實上,它們爲詳細的匿名類(使用單一方法)實現提供了捷徑。
因此,簡而言之,Lambda表達式=抽象方法實現(功能接口)。
例如,你的表情可以分配給下面的功能接口:
public interface MyInterface {//define Functional Interafce (SAM)
public int someMethod(int a);
}
public class Test {
public static void main(String[] args) {
MyInterface myInterface = (int a) -> a +5;//assign the expression to SAM
int output = myInterface.someMethod(20)); //returns 25
}
}
的問題,如上面所指出的,你是不是做與拉姆達什麼。這意味着:
"Hello";
這是不是有效的Java。
Lambdas是不能用作語句的表達式。從JLS8 §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).
考慮這個例子:
// 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);
你不是做與拉姆達什麼,和Java的語法儘量排除語句顯然沒有做任何事情。 – user2357112
你期待該代碼做什麼? – Andreas