2016-12-02 13 views
1

の「AssignmentOperator式」エラー私は今、ラムダを学んでいる、と私はいくつかのチュートリアルを見てきましたし、それは簡単な例を思い付いた:簡単なラムダコード

(int x) -> x + 5; 

しかし、私のコンパイラは、このエラーを示しています。

Syntax error, insert "AssignmentOperator Expression" to complete Expression 

何か忘れていますか?

+0

あなたはラムダを使って何をやっていない、とJavaの構文は、明らかに何もしない文を除外しようとします。 – user2357112

+0

そのコードが何を期待していますか? – Andreas

答えて

3

ラムダ式は常に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 
    } 
} 
0

問題は、上記で指摘したように、あなたがラムダを使って何をしていないされています。コンパイラは、機能インタフェース(例えばjava.util.function.Functionが)あなたのラムダの型として推論するかわからないん

  • :これはことを意味します。
  • あなたのコード行は "文ではありません"(コンパイラによって頻繁に発行される別のエラーメッセージ)です。有効なJavaではありません

"Hello";

:これは、このようなものに似ています。

1

ラムダは、ステートメントとして使用できない式です。 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);