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

Mar*_*rno 6 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";
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试使用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";
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我遗漏了一些关于lambda表达式的内容,或者它是一个IntellIJ IDEA 14错误?

我现在不想报告错误,因为我已经报告了由我的代码而不是IntellIJ IDEA引起的错误,所以我想在做某事之前确定(因为我不经常使用Java 8,所以我可能是错的).

Mik*_*der 8

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