Использование переменной вне блока try catch (Java) - PullRequest
1 голос
/ 22 мая 2019

У меня есть переменная, которую я отключил перед блоком try catch, чтобы убедиться, что я могу получить к нему доступ за пределами блока

/*
        Try to get a list of all files.
         */

        List<String> result; 
        try( Stream<Path> walk = Files.walk(Paths.get("data"))){
            List<String> result = walk.filter(Files::isRegularFile)
                    .map(x -> x.toString()).collect(Collectors.toList());


        }
        catch(Exception e){
            e.printStackTrace();
            List<String> result = null;
        }


        ListIterator iter = result.listiterator() // cannot resolve symbol

, когда я беру исходное объявление, я получаю символ не удается разрешитьошибка.Когда я сохраняю его, я получаю уже объявленную ошибку переменной.

Как лучше всего структурировать это, чтобы использовать переменную вне оператора try, кроме предложения?

1 Ответ

0 голосов
/ 22 мая 2019

Чтобы устранить ошибку компиляции, объявите переменную result только перед блоком try-catch:

List<String> result; 
try( Stream<Path> walk = Files.walk(Paths.get("data"))){
    result = walk.filter(Files::isRegularFile)
            .map(x -> x.toString()).collect(Collectors.toList());
}
catch(Exception e){
    e.printStackTrace();
    result = null;
}

Однако обратите внимание, что доступ к переменной result после блока try-catch (ваш* Выражение 1006 *), не проверяя, что оно не равно нулю, может выдать NullPointerException.

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

...