Бесполезно выбрасывать исключение в блоке catch? - PullRequest
1 голос
/ 30 апреля 2019

Я пытаюсь выяснить, как лучше всего обрабатывать исключения в Java. Это хорошая идея, чтобы бросить RunTimeException в блоке catch или это бесполезно?

public final void clickOnElement(MobileElement mobileElement, int secondsToWait) {
    try {
        abstractPlatform.clickOnElement(mobileElement,secondsToWait);
    } catch (Exception e) {
        throw new NoSuchElementException("Wasn't able to click on element " + mobileElement);
    }
}

Ответы [ 3 ]

3 голосов
/ 30 апреля 2019

Иногда действительно требуется исключение RuntimeException вместо проверенного исключения.

} catch (Exception e) {
    throw new NoSuchElementException("Wasn't able to click on element " + mobileElement, e);
}

Я бы указал точные исключения, например IOException|SQLException, и добавил бы его в качестве причины для повторного выброса.

Недавние варианты использования: лямбды , которые находятся в контексте (потоки), где отмеченные исключения не допускаются.

Или просто добавить дополнительную информацию , которая может помочьточно определить ошибку, например, имя файла или оператор и параметры SQL.

Особенно IllegalArgumentException и IllegalStateException могут быть более информативными, чем другие исключения.

1 голос
/ 30 апреля 2019

Может быть или не быть бесполезным, полностью зависит от того, как мы его используем.Я использовал его таким образом, чтобы я мог вести журналы исключений.

public final void clickOnElement(MobileElement mobileElement, int secondsToWait) 
{
  try 
  {
    abstractPlatform.clickOnElement(mobileElement,secondsToWait);
  } 
  catch (Exception e) 
  {
    logError(this, "clickOnElement()", "Wasn't able to click on element"+mobileElement);
    throw new NoSuchElementException("Wasn't able to click on element " + mobileElement);
  }
}

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

И, как разработчик API, я хочу вернуть определенный код состояния вместо того, чтобы показывать сообщение об исключении, отправленное tomcat / framework.В этом случае мы можем выбросить исключение в catch, и это исключение можно сохранить в каком-либо родительском методе или в самой платформе, если для этого есть какой-то механизм.

Так что все зависит от того, как мы его используем.

0 голосов
/ 30 апреля 2019

Нет, это не бесполезно, я делаю это много в коде, который я пишу. Я бы предпочел увидеть свое собственное исключение с сообщением об ошибке, так как в большинстве случаев вы обрабатываете, где она обнаружена, вы будете знать, почемупоэтому я предпочитаю видеть исключение с подробным сообщением о точной проблеме вместо генерированного общего исключения и просто видеть сообщение об ошибке в консоли, примером чего-то бесполезного будет

try {
    abstractPlatform.clickOnElement(mobileElement,secondsToWait);
} catch (Exception e) {
    throw e;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...