Почему методы OSGI BundleActivator объявляются как «исключение throws»? - PullRequest
2 голосов
/ 16 февраля 2012

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

никогда не объявляйте метод "throws Exception"

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

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

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

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

void start(BundleContext context) throws BundleActivatorException

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

1 голос
/ 17 февраля 2012

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

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

1 голос
/ 16 февраля 2012

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

...