Почему методы Osgi BundleActivator объявляются с «бросками исключения»?

StackOverflow https://stackoverflow.com/questions/9311890

  •  26-10-2019
  •  | 
  •  

Вопрос

Оба start а также stop Методы Осги BundleActivator объявляются с throws Exception. Анкет В то же время в его книге «Эффективная Ява», «Второе издание», «Пункт 62», Джошуа Блох говорит

Никогда не объявляйте метод "бросает исключение"

Так это плохое решение о дизайне в BundleActivator Или такая общность оправдана в этом случае и почему?

Это было полезно?

Решение

Обратите внимание, что вы можете объявить свой start а также stop Методы без каких -либо throws пункт. (Или вы можете объявить эти методы любыми java.lang.Exception Подклассы.)

С другой стороны, конкретный, например

void start(BundleContext context) throws BundleActivatorException

Метод не будет сильно измениться. Это просто заставило бы исполнителей поймать их исключения и переоценить его в BundleActivatorException. Анкет Поскольку каждое исключение делает активацию пакета бессмысленной это try-catch Блок действительно ненужный, так что легче бросить java.lang.Exception.

Другие советы

Выбросить исключение из start() или же stop() Метод указывает на то, что что -то серьезно не так, и изменение жизненного цикла комплекта не должно проходить. Поскольку мы разделяем опасения обнаружения ситуации (путем) и обработать ее (по рамке), бросить Exception это единственное разумное, что нужно сделать.

Я считаю совет Джоша Блоха анахроничным. Нет ничего плохого в throws Exception. Анкет Это дает вам возможность бросить любое исключение, которое вам нравится, и каркас OSGI справится с этим.

Обратите внимание, что вам никогда не нужно вызывать эти методы самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top