как обработать исключение в Java - PullRequest
1 голос
/ 06 января 2010

Итак, я использую HtmlUnit, и подпись метода выглядит следующим образом:

public HtmlAnchor getAnchorByText(String text)
                           throws ElementNotFoundException

Таким образом, это означает, что вызов этого метода не просто вернет ноль, но вызовет исключение.

(я нахожу это боль !!, в c # методы обычно просто возвращают ноль, если не найдены, намного проще, если я что-то упустил ??)

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

Как мне это сделать на Java?

ссылка: http://htmlunit.sourceforge.net/apidocs/index.html

Ответы [ 2 ]

6 голосов
/ 06 января 2010

Имейте в виду, что ElementNotFoundException является , а не проверенным исключением, чтобы вы могли его игнорировать. Но если элемент не существует, есть допустимый случай, в который вы не хотите добавлять исключение, тогда да, вам придется заключить код в блок try-catch и разобраться с ним.

Я тоже считаю этот вид управления потоком за исключением болезненным. Базовая конструкция, которую вы хотите:

HtmlAnchor anchor = null;
try {
  htmlAnchor = getAnchorByText(text);
} catch (ElementNotFoundException) {
  // do nothing
}

Если вы часто пишете эту последовательность, оберните ее вспомогательным методом:

public static HtmlAnchor myFindAnchor(String text) {
  try {
    return getAnchorByText(text);
  } catch (ElementNotFoundException) {
    return null;
  }
}

и вызывайте это вместо того, чтобы засорять ваш код поддельными блоками try-catch.

1 голос
/ 06 января 2010

- Правка:

См. Ответ Клита;Я предположил, что это было проверенное исключение из-за описания OP.

- Старый ответ:

Вы просто пытаетесь поймать его (или перебросить его из вашего method).

В Java они называются "проверенными" исключениями и, как правило, считаются ошибкой :) (но это не стоит обсуждать здесь).

try {
    getAnchorByText(,,,)
} catch (ElementNotFoundException enfe) {
    ///
}

или броски:

public void myFoo (...) throws ElementNotFoundException

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

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