2014-11-12 15 views
6

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.

enter image description here

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

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"; 
     } 
    }); 
} 

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).

Antwort

8

Dies scheint ein bekanntes Problem zu sein. Laut JetBrains liegt die Ursache für dieses Verhalten beim JDK. Für weitere Informationen siehe: IDEA-126257

3

Ich kann bestätigen, was in IDEA Fehlerbericht von Mike Rylander verknüpft geschrieben: Dies ist ein JDK Fehler und Update auf Version 8u60_25 des JDK löst es.

Verwandte Themen