我注意到,当我的调试器在lambda内停止时,当我将鼠标悬停在局部变量上时,它将报告无法找到局部变量’variable_name’,即使它在lambda中可见并且已被使用.
示例代码
public class Main {
public static void main(String[] args) {
String a = "hello_world";
m1(a);
}
private static void m1(String a) {
AccessController.doPrivileged((PrivilegedAction) () -> {
System.out.println("blala " + a);
return "abc";
});
}
}
尝试使用System.out.println中的断点(“blala”a);并在返回“abc”后,它总是报告相同的错误.
我使用了AccessController.doPrivileged,因为它是我在原始代码中使用的,当然我使用的是Java 8.
它在Watchers和Evaluate Expression中说了同样的话.
我尝试使用“匿名类”版本,调试器正确看到了a的值
private static void m1(String a) {
AccessController.doPrivileged(new PrivilegedAction() {
@Override
public String run() {
System.out.println("blala " + a);
return "abc";
}
});
}
我遗漏了一些关于lambda表达式的内容,或者它是一个IntellIJ IDEA 14错误?
我现在不想报告错误,因为我已经报告了由我的代码而不是IntellIJ IDEA引起的错误,所以我想在做某事之前确定(因为我不经常使用Java 8,所以我可能是错的).