调试器无法在Lambda中看到局部变量

时间:2014-11-12 20:11:28

标签: intellij-idea intellij-14

我注意到,当我的调试器在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"之后使用断点,并始终报告相同的错误。

enter image description here

我使用了AccessController.doPrivileged,因为它是我在原始代码中使用的内容,当然我使用的是Java 8。

它在WatchersEvaluate Expression中说同样的事情。

我尝试使用&#34;匿名课程&#34;版本和调试器正确看到a的值

enter image description here

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,所以我可能错了。)

2 个答案:

答案 0 :(得分:8)

这似乎是一个已知问题。根据JetBrains,这种行为的根本原因在于JDK。有关详细信息,请参阅:IDEA-126257

答案 1 :(得分:3)

我可以确认Mike Rylander链接的IDEA错误报告中写的内容:这是一个JDK错误,JDK版本8u60_25的更新解决了它

相关问题