Ich bemerkte, dass, wenn ich meine Maus über eine lokale Variable schweben, wenn mein Debugger in einem Lambda gestoppt wird es Cannot find local variable 'variable_name'
berichten sogar, wenn es innerhalb der Lambda sichtbar ist und es verwendet wird.Debugger kann nicht sehen, lokale Variable in einer Lambda
Beispielcode
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";
});
}
}
mit einem Breakpoint Versuchen in System.out.println("blala " + a);
und nach return "abc"
und es immer den gleichen Fehler melden.
habe ich AccessController.doPrivileged
weil es ist, was ich in meiner ursprünglichen Code verwendet und natürlich bin ich mit Java 8.
Es sagt das Gleiche in Watchers
und Evaluate Expression
.
Ich versuchte, die "anonyme Klasse" Version und den Debugger sieht den Wert von a
richtig
private static void m1(String a) {
AccessController.doPrivileged(new PrivilegedAction<String>() {
@Override
public String run() {
System.out.println("blala " + a);
return "abc";
}
});
}
ich etwas über Lambda-Ausdrücke bin fehlt oder es ist ein IntelliJ IDEA 14 Bug?
Ich möchte den Fehler jetzt nicht melden, weil ich bereits einen Fehler gemeldet habe, der durch meinen Code anstelle von IntellIJ IDEA verursacht wurde, also möchte ich sicher sein, bevor ich etwas mache (und weil ich Java nicht verwende 8 so oft, so könnte ich falsch liegen).