Попробуй ... наконец-то ... без улова сгенерировав исключение - PullRequest
3 голосов
/ 04 октября 2011

Это действительно глупый вопрос, но мне было интересно. У меня есть переменная, которую я должен заполнить Integer. В некоторых случаях источник, откуда я получаю данные, может возвращать пустую строку или просто находиться в автономном режиме. Мне не нужно обрабатывать автономный случай, потому что программа никогда не зайдет так далеко, если источник отключен. Поэтому я подумал сделать что-то вроде этого:

    int i = 0;
    try {
        i = mySource.getInt();
    }
    finally {
        System.out.println(i);
    }

int i = 0 - это мое базовое значение, поэтому, если мне придется анализировать пустую строку, я просто использую начальное значение. В этом случае мы сгенерируем исключение, и оно не будет перехвачено. Есть ли способ сделать что-то подобное без обработки исключения (то есть без использования catch(Exception e){}) или это просто плохая практика?

Просто чтобы уточнить: мне не нужно проверять, подключен ли источник сейчас, потому что это проанализированный xml-файл, поэтому я проверю, не отключен ли он при загрузке файла.

Ответы [ 4 ]

10 голосов
/ 04 октября 2011

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

Время использовать try ... finally без перехвата - это когда у вас есть что-то, что требует очистки (обычно ресурс, который требует закрытия), но вы не хотите обрабатывать исключения, которые могут быть выброшеныВы хотите отпустить их.Это противоположный случай, у вас нет ничего, что нужно закрывать, вы просто хотите отключить исключение и использовать значение по умолчанию.

4 голосов
/ 04 октября 2011

Если вы контролируете getInt(), сделайте так, чтобы оно генерировало непроверенные исключения, и удалите предложение throws.Проверенные исключения проиграли войну несколько лет назад.

2 голосов
/ 04 октября 2011

Проверенные исключения оправдываются при соблюдении следующих условий:

  1. Исключительное состояние не может быть предотвращено при правильном использовании API
  2. Программист, использующий API, может предпринять некоторые полезные действия, столкнувшись с исключением

В противном случае непроверенные исключения являются более подходящими (как предложено @ Stefan Kendall ).

0 голосов
/ 04 октября 2011

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

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