我注意到,当我的调试器在lambda内停止时,当我将鼠标悬停在局部变量上时,它会报告Cannot find local variable '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<String>) () -> {
System.out.println("blala " + a);
return "abc";
});
}
}
尝试在System.out.println("blala " + a);
和return "abc"
之后使用断点,并始终报告相同的错误。
我使用了AccessController.doPrivileged
,因为它是我在原始代码中使用的内容,当然我使用的是Java 8。
它在Watchers
和Evaluate Expression
中说同样的事情。
我尝试使用&#34;匿名课程&#34;版本和调试器正确看到a
的值
private static void m1(String a) {
AccessController.doPrivileged(new PrivilegedAction<String>() {
@Override
public String run() {
System.out.println("blala " + a);
return "abc";
}
});
}
我遗漏了一些关于lambda表达式的内容,或者它是一个IntellIJ IDEA 14错误?
我现在不想报告错误,因为我已经报告了由我的代码而不是IntellIJ IDEA引起的错误,因此我想在做某事之前确定(并且因为我没有&#39;经常使用Java 8,所以我可能错了。)
答案 0 :(得分:8)
这似乎是一个已知问题。根据JetBrains,这种行为的根本原因在于JDK。有关详细信息,请参阅:IDEA-126257
答案 1 :(得分:3)
我可以确认Mike Rylander链接的IDEA错误报告中写的内容:这是一个JDK错误,JDK版本8u60_25的更新解决了它。