デバッガーがラムダ内で停止しているときにローカル変数の上にマウスを置くと、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 をそれほど頻繁に使用しないため、だから私は間違っているかもしれません)。