15

より大きなハッシュ マップを一度に宣言および定義しようとしています。これは私がそれを行う方法です:

public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{
    put(x, y);
    put(x, y);
}};

しかし、の本体でラムダ式を使用しようとするとput、日食の警告/エラーが発生します。これは、HashMap でラムダを使用する方法です。

public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{
    put(0, () -> { return "nop"; });
    put(1, () -> { return "nothing...."; });
}};

Eclipse は、カンマで始まるラムダ全体に下線を引きます。エラー メッセージ:

Syntax error on token ",", Name expected    
Syntax error on tokens, Expression expected instead

誰かが私が間違っていることを知っていますか? でラムダ式による初期化は許可されていHashMapますか? 助けてください。

4

3 に答える 3

7

これは、 http ://bertram2.netbeans.org:8080/job/jdk8lambda/lastSuccessfulBuild/artifact/nbbuild/ からダウンロードした Netbeans Lamba ビルドで正常に動作します。

import java.util.*;
import java.util.concurrent.Callable;

public class StackoverFlowQuery {

  public static void main(String[] args) throws Exception {

    HashMap<Integer, Callable<String>> opcode_only = 
          new HashMap<Integer, Callable<String>>() {
            {
              put(0, () -> {
                return "nop";
              });
              put(1, () -> {
                return "nothing....";
              });
            }
          };
    System.out.println(opcode_only.get(0).call());
  }

}
于 2013-07-04T06:23:46.017 に答える
4

あなたは正しいことをしています。EclipseプロジェクトのプロパティのJavaビルドパスからJDKライブラリを1.8バージョンに更新してください。

私は今、以下のコードを試してみましたが、私のEclipseでうまく動作しています:

        HashMap<Integer, Integer> hmLambda = new HashMap<Integer, Integer>() {
        {
            put(0, 1);
            put(1, 1);
        }
    };
    System.out.println(hmLambda.get(0));

    hmLambda.forEach((k, v) -> System.out.println("Key " + k
            + " and Values is: " + v));
于 2014-09-02T05:46:07.387 に答える
0

私が知る限り、Netbeans 7.4 は Java 8 を完全にサポートしています。Eclipse に問題がありました (atm は java8 をサポートしていないため、7 の古い Lambda 式をコンパイルできるだけです)。それが、Netbeans に切り替えた理由です。以前のバージョンの Netbeans をインストールした場合は、完全にアンインストールして、新しいバージョンが古いログファイルなどを参照できないようにしてください。

于 2013-10-18T11:14:18.403 に答える