Java: Как правильно объявить метод интерфейса, который может вызывать исключение?

Допустим, у меня есть этот интерфейс A, который реализован несколькими поставщиками:

interface A
{
    void x();
    void y();
}

Однако я хочу, чтобы поставщики могли генерировать исключения чтобы сигнализировать о том, что что-то не удалось, и потенциально метод может вызвать исключение RuntimeException . В каждом случае код, вызывающий эти методы, должен обработать сбой и продолжить работу. Я не хочу, чтобы система вылетела из строя только из-за того, что один поставщик предлагает NPE. Вместо того, чтобы оставлять это на усмотрение человека, вызывающего метод (или на самом деле ниже по линии обслуживания), я хотел бы убедиться, что каждый вызов будет улавливать все исключения, объявив каждый метод как:

void x() throws Exception;

, но это обычно плохая практика (PMD не мне это не нравится, и в целом я согласен с правилом для конкретных методов), поэтому мне интересно, это исключение из правила или есть лучший способ?

Позвольте мне пояснить, я ищу решение, в котором вызывающий интерфейса принудительно обрабатывает все исключения (включая RuntimeException s).

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

5
задан Dave H 21 June 2011 в 15:55
поделиться