Допустим, у меня есть этот интерфейс A, который реализован несколькими поставщиками:
interface A
{
void x();
void y();
}
Однако я хочу, чтобы поставщики могли выдавать исключения, сигнализирующие о том, что что-то не удалось, и потенциально метод может вызвать RuntimeException
.В каждом случае код, который вызывает эти методы, должен обработать ошибку и продолжить.Просто потому, что 1 продавец бросает NPE, я не хочу, чтобы система рухнула.Вместо того, чтобы оставлять это на усмотрение человека, вызывающего метод (или, на самом деле, на линии поддержки), я хотел бы убедиться, что каждый вызов будет перехватывать все исключения, объявив каждый метод как:
void x() throws Exception;
, но этокак правило, плохая практика (PMD не нравится, и в целом я согласен с правилом для конкретных методов), поэтому мне интересно, является ли это исключением из правила или есть лучший способ?
Позвольте мне прояснить, яЯ ищу решение, в котором вызывающий интерфейс вынужден обрабатывать все исключения (включая RuntimeException
s).
Для дальнейшей детализации моей среды все это выполняется в рамках OSGi.Таким образом, каждый поставщик упаковывает свой код в пакет, и OSGi будет обрабатывать все исключения, чтобы предотвратить сбой всей системы.На самом деле я смотрю на интерфейсы сервисов OSGi, которые будут вызываться каким-то ядром.Я хочу убедиться, что, когда я перебираю все сервисы, один сервис не выбрасывает NPE и не останавливает выполняющийся процесс.Я хочу обработать это более изящно, перехватывая все исключения, генерируемые службой, чтобы другие предоставляемые службы все еще управлялись.