Почему методы Osgi BundleActivator объявляются с «бросками исключения»?
Вопрос
Оба 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 справится с этим.
Обратите внимание, что вам никогда не нужно вызывать эти методы самостоятельно.