Доступ к параметрам метода из асинхронно работающей лямбды - PullRequest
0 голосов
/ 29 августа 2018

Что я знаю: только 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? Я протестировал код, скомпилировал и, что интересно, «возвращенное» сообщение было напечатано раньше, чем «напечатать». Это означает, что я мог получить доступ к параметрам метода после его возврата.

1 Ответ

0 голосов
/ 29 августа 2018

Код не будет генерировать исключение, так как param1 является окончательным. Java-лямбды похожи на замыкания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...