Можно ли генерировать исключение Java через вызывающий метод базового класса, который не генерирует исключения? - PullRequest
3 голосов
/ 14 сентября 2010

Это может быть нелепый вопрос Java об обработке исключений, но у меня есть пользователь UI (Android Activity), который запрашивает услуги у моего подкласса ContentProvider. Подкласс хочет выбросить некоторые исключения, когда sd-карта заполнена, sd-карта отсутствует, ошибка сетевого ввода-вывода и т. Д. Однако, когда я кодирую CP-подкласс, чтобы выбросить мои исключения, компилятор предлагает добавить исключения класс СР. Очевидно, я не хочу изменять базовый класс, но я хочу, чтобы пользовательский интерфейс перехватывал исключения подкласса.

Имеет смысл? Это возможно? Если нет, есть ли лучший шаблон для моего подкласса службы, чтобы вернуть свой отбрасываемый объект обратно в пользовательский интерфейс?

Ответы [ 3 ]

8 голосов
/ 14 сентября 2010

Вы можете выбросить Unchecked exceptions, не добавляя их к прототипу метода.

Непроверенным исключением является любое исключение, которое наследуется от RuntimeException.Это то, что вы хотели сделать?

6 голосов
/ 14 сентября 2010

Вы можете выбросить экземпляры подклассов RuntimeException, которые не проверяются компилятором.

Однако, как говорится, спецификация пустого исключения является частью контракта методов базового класса.Желательно, чтобы подклассы удовлетворяли условиям контракта, чтобы экземпляры подкласса можно было использовать в любом коде, который использует тип суперкласса.(Это известно как принцип подстановки Лискова .)

3 голосов
/ 14 сентября 2010

Вам нужно только объявить и отловить «проверенные исключения».Вам не нужно объявлять или явно перехватывать исключения RuntimeException.Таким образом, вы можете генерировать RuntimeException и перехватывать его там, где захотите, в иерархии.

...