2014-11-12 6 views
6

디버거가 람다에서 중지되었을 때 로컬 변수 위로 마우스를 가져 가면 람다 내부에서 볼 수 있고 사용되는 경우에도 Cannot find local variable 'variable_name'을보고합니다. 디버거에서 람다의 로컬 변수를 볼 수 없음

예제 코드

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를 사용 물론 나는 WatchersEvaluate Expression에서 같은 일을 말한다 자바 8.

을 사용하고 있습니다.

는 나는 "익명 클래스"버전 및 디버거를 사용하여 시도

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

나는 람다 표현식에 대한 뭔가를 누락하거나이하게 IntelliJ IDEA (14) 버그 제대로 a의 값을보고?

IntellIJ IDEA 대신 내 코드로 인해 발생한 버그를 이미보고했기 때문에 지금보고하지 않으려 고합니다. 그래서 뭔가하기 전에 (그리고 Java를 사용하지 않기 때문에) 8 너무 자주, 그래서 내가 잘못 될 수 있습니다).

답변

8

이것은 알려진 문제인 것으로 보입니다. JetBrains에 따르면이 동작의 근본 원인은 JDK와 관련이 있습니다. 더 많은 정보를 참조 : IDEA-126257

3

나는 마이크 Rylander로 연결 IDEA 버그 보고서에 기록 된 것을 확인할 수 있습니다 이것은 JDK 버그과 해결의 JDK 버전 8u60_25에 업데이트입니다.