Что я знаю: только final
или эффективно final
локальные переменные доступны изнутри лямбды. static
переменные также доступны и могут быть изменены.
Чего я не знаю: почему этот код не выдает исключение?
public static String sampleFunction(String param1, int param2) {
new Thread(() -> {
try { Thread.sleep(100000); } catch (InterruptedException e) { }
// accessing method parameter here...
String _param1 = param1;
System.out.println(_param1);
}).start();
return "";
}
public static void Main(String[] arguments) {
sampleFunction("to print", 9);
System.out.println("function returned");
}
Так что, имея это в виду, параметры возвращаются при возврате
что происходит, прежде чем пытаться получить к ним доступ из асинхронно запущенного выражения lambda
, почему не выдается Exception
? Я протестировал код, скомпилировал и, что интересно, «возвращенное» сообщение было напечатано раньше, чем «напечатать».
Это означает, что я мог получить доступ к параметрам метода после его возврата.