Поймать исключения из нескольких методов в классе - PullRequest
0 голосов
/ 09 октября 2011

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

private void setAColor(float r, float g, float b, float a) throws AnException {}
private void setBColor(float r, float g, float b, float a) throws AnException {}
private void setCColor(float r, float g, float b, float a) throws AnException {}

Вместо того, чтобы пользователь обрабатывал эти исключения,Я хотел бы быть в состоянии поймать их и обращаться с ними в классе.Каждое исключение метода будет перехвачено точно таким же образом.Я не хочу помещать один и тот же блок метода try / catch в каждый отдельный метод.Есть ли способ, которым я могу поймать эти исключения вне тела методов, но внутри класса?

Спасибо за ваше время, даже если вы не можете мне помочь.

ПРИЛОЖЕНИЕ БОЛЬШЕИНФОРМАЦИЯ:
Эти методы могут вызываться до определенной точки: после вызова метода, который устанавливает переменную "isImmutable" в значение true, эти методы больше не должны иметь возможности что-либо изменять в объекте.Следовательно, если один из этих методов вызывается после того, как для isImmutable задано значение true, то они должны выдать исключение с именем «ImmutableException».Для / этой конкретной реализации / я хочу иметь возможность обрабатывать их самостоятельно, вместо того, чтобы переходить к каждой отдельной точке кода, в которой эти методы вызываются, и обрабатывать их затем точно так же.

Ответы [ 3 ]

1 голос
/ 09 октября 2011

Вы можете превратить вышеуказанные методы в методы-заглушки, которые вызывают

setColorDelagator(char abc, ...)

который делегирует

setColorAWithErrorHandling
setColorBWithErrorHandling
setColorCWithErrorHandling 

в пределах попытки / улова.

Я согласен, что это не оптимально, но я не уверен в лучшем способе.

1 голос
/ 09 октября 2011

Я не хочу вставлять один и тот же блок метода try / catch в каждый отдельный метод.

Тогда не бросайте исключение.

Есть ли способ, которым я могу поймать эти исключения вне тела методов, но внутри класса?

Нет.

Для / этого конкретногоВнедрение /, я хочу иметь возможность обрабатывать их самостоятельно, вместо того, чтобы переходить к каждой отдельной точке кода, в которой эти методы вызываются, и обрабатывать их затем точно таким же образом.Если обнаружена ошибка, как вы намереваетесь сообщить о ней?

После вызова метода, который устанавливает для переменной "isImmutable" значение true, эти методы больше не должны иметь возможности что-либо менять вобъект.Следовательно, если один из этих методов вызывается после того, как для «isImmutable» установлено значение «истина», они должны вызвать исключение с именем «ImmutableException».

Рассматривали ли вы сделать свое исключение подклассом RuntimeException?Тогда вызывающим абонентам не нужно объявлять обработчики исключений - если нет обработчика, программа будет остановлена ​​из-за «необработанного исключения».

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

Чтобы подойти к этому с другой стороны, вы рассматривали возможность перехода на заводскую схему?Вместо вызова чего-либо для установки isImmutable в значение true вызовите его, чтобы получить экземпляр, в котором isImmutable имеет значение true ... и рассматриваемый метод возвращает другую версию класса, в которой нет доступных методов установки.

...