Должны ли методы интерфейсов генерировать исключения? - PullRequest
4 голосов
/ 31 декабря 2010

Я имею в виду, в определении.Если у меня есть метод класса, который реализует интерфейс, и я хочу вызвать исключение, как я могу это сделать, если у интерфейса нет объявления throws.

Спасибо

Ответы [ 4 ]

5 голосов
/ 31 декабря 2010

Как код, основанный на вашем классе, реализующем интерфейс, узнает, что он должен обрабатывать новое исключение?У вас есть два варианта:

  1. Обрабатывать его в методе интерфейса.
  2. Бросить исключение, которое наследуется от RuntimeException, которое не нужнов предложении throws.Однако любой код, вызывающий этот метод, не должен перехватывать это исключение и не знает, что его можно выбросить.Так что будьте осторожны при использовании этой опции.По возможности документируйте их, но вы все равно столкнетесь с проблемой при передаче объекта в существующий метод, такой как библиотека или встроенный метод.
5 голосов
/ 31 декабря 2010

Вы просто не делаете или бросаете RuntimeException.

3 голосов
/ 31 декабря 2010

Методы в вашем интерфейсе могут объявлять о создании проверенных исключений, только если для всех возможных реализаций имеет смысл заставить клиента обрабатывать это исключение. Подумайте о java.sql.Connection (интерфейс со всеми методами, генерирующими SQLException). В противном случае, если только одна конкретная реализация должна иметь дело с каким-то проверенным исключением, обработайте его там и либо оберните его в некоторое RuntimeException и перебросьте, либо восстановите из этого состояния, если это имеет смысл.

3 голосов
/ 31 декабря 2010

Если вы не можете коснуться интерфейса, тогда ваш единственный выбор - бросить RuntimeException. Существует несколько стандартных исключений RuntimeException, которые вы можете использовать напрямую: IllegalStateException, IllegalArgumentException, UsupportedOperationException и т. Д.

Используйте эти стандартные исключения, если они соответствуют вашим потребностям, или создайте свои собственные, расширив класс RuntimeException. Рассмотрите возможность документирования сгенерированных исключений, используя доклет @throws в javadoc.

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