Отладчик не может видеть локальную переменную в лямбде
Я заметил, что когда я наведу курсор мыши на локальную переменную, когда мой отладчик остановлен внутри лямбды, он сообщит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"
и он всегда сообщает об одной и той же ошибке.
я использовал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";
}
});
}
Я что-то упускаю из-за лямбда-выражений или это ошибка IntellIJ IDEA 14?
Я не хочу сообщать об ошибке прямо сейчас, потому что я уже сообщил об ошибке, которая была вызвана моим кодом вместо IntellIJ IDEA, поэтому я хочу быть уверен, прежде чем что-то делать (и потому что я не использую Java 8 так часто, так что я могу ошибаться).