7

デバッガーがラムダ内で停止しているときにローカル変数の上にマウスを置くと、Cannot find local variable 'variable_name'ラムダ内で表示されていて使用されていてもレポートされることに気付きました。

サンプルコード

public class Main {
    public static void main(String[] args) {
        String a = "hello_world";
        m1(a);
    }

    private static void m1(String a) {
        AccessController.doPrivileged((PrivilegedAction<String>) () -> {
            System.out.println("blala " + a);
            return "abc";
        });
    }
}

ブレークポイントSystem.out.println("blala " + a);を前後に試してみると、return "abc"常に同じエラーが報告されます。

ここに画像の説明を入力

元のコードで使用AccessController.doPrivilegedしたものであり、もちろんJava 8を使用しているため、使用しました。

と で同じことを言っていWatchersますEvaluate Expression

「匿名クラス」バージョンを使用してみましたが、デバッガーは値をa正しく認識しています

ここに画像の説明を入力

private static void m1(String a) {
    AccessController.doPrivileged(new PrivilegedAction<String>() {
        @Override
        public String run() {
            System.out.println("blala " + a);
            return "abc";
        }
    });
}

ラムダ式について何か不足していますか、それとも IntelIJ IDEA 14 のバグですか?

IntellIJ IDEA ではなく自分のコードが原因であるバグを既に報告しているので、今はバグを報告したくありません。何かを行う前に確認したいのですが (そして、Java 8 をそれほど頻繁に使用しないため、だから私は間違っているかもしれません)。

4

2 に答える 2