Почему методы OSGI BundleActivator объявляются с "исключением бросков"?
Как start
, так и stop
методы OSGI BundleActivator объявляются с помощью throws Exception
. В то же время в своей книге Effective Java, второе издание, пункт 62, Джошуа блох говорит
Так является ли это плохим проектным решением вНикогда не объявляйте метод "выбрасывает исключение"
BundleActivator
или такая общность оправдана в данном случае и почему?3 ответа:
Обратите внимание, что вы можете объявить свои методы
start
иstop
без какого-либо предложенияthrows
. (Или вы можете объявить эти методы с любыми подклассамиjava.lang.Exception
.)С другой стороны, конкретный, например
void start(BundleContext context) throws BundleActivatorException
Метод не слишком изменится. Это просто заставило бы разработчиков перехватывать свои исключения и перестраивать их, завернутые в
BundleActivatorException
. Поскольку каждое исключение делает активацию пакета бессмысленной, этот блокtry-catch
действительно не нужен, поэтому его проще броситьjava.lang.Exception
.
Выбрасывание исключения из метода
start()
илиstop()
указывает на то, что что-то серьезно не так, и изменение жизненного цикла пакета не должно проходить. Поскольку мы разделяем проблемы обнаружения ситуации (по связке) и обработки ее (по структуре), бросаниеException
является единственным разумным действием.