Использование переменной вне блока try catch (Java)

У меня есть переменная, которую я указал перед блоком 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, кроме предложения?

Jist удалите объявление в блоке try, только назначьте его уже объявленной переменной: try(...){ result = ...

NeplatnyUdaj 22.05.2019 13:08

замените List<String> result на result в попытке поймать

Lino 22.05.2019 13:14

См. также stackoverflow.com/questions/32805813/…

Raedwald 22.05.2019 13:47
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
1
3
578
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы устранить ошибку компиляции, объявите переменную 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 (ваш оператор result.listiterator()) без проверки того, что она не равна нулю, может вызвать NullPointerException.

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

Другие вопросы по теме