の「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
何か忘れていますか?
ラムダ式は常にFunctional Interafcesのリファレンスタイプ(単一抽象メソッドインターフェイスとも呼ばれます)に割り当てられる必要があります。実際には、匿名の冗長クラス(単一のメソッドを持つ)の実装へのショートカットを提供しています。
したがって、簡単な言葉では、ラムダ式=抽象メソッドの実装(機能インターフェイスの)。
は、例えば、あなたの式は、以下の機能のインターフェイスに割り当てることができます
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
}
}
問題は、上記で指摘したように、あなたがラムダを使って何をしていないされています。コンパイラは、機能インタフェース(例えばjava.util.function.Functionが)あなたのラムダの型として推論するかわからないん
"Hello";
:これは、このようなものに似ています。
ラムダは、ステートメントとして使用できない式です。 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