start
和stop
OSGI BundleActivator的方法用throws Exception
聲明。在他的書有效的Java,第二版,第62項的同時,約書亞布洛赫說爲什麼OSGI BundleActivator方法是用「throws Exception」聲明的?
從來沒有一個方法聲明「拋出異常」
因此,它是在BundleActivator
還是這麼差的設計決策這種情況下的普遍性是合理的,爲什麼?
start
和stop
OSGI BundleActivator的方法用throws Exception
聲明。在他的書有效的Java,第二版,第62項的同時,約書亞布洛赫說爲什麼OSGI BundleActivator方法是用「throws Exception」聲明的?
從來沒有一個方法聲明「拋出異常」
因此,它是在BundleActivator
還是這麼差的設計決策這種情況下的普遍性是合理的,爲什麼?
請注意,您可以聲明您的start
和stop
方法,但不包含任何throws
子句。 (或者你可以聲明這些方法與任何java.lang.Exception
子類)。
在另一方面,具體的,例如
void start(BundleContext context) throws BundleActivatorException
方法不會改變太多。它只是讓執行者捕捉到他們的異常,並將其重新包裝在BundleActivatorException
中。由於每個例外都會導致束激活毫無意義,因此try-catch
塊實際上是不必要的,因此投擲java.lang.Exception
更容易。
從start()
或stop()
方法中拋出異常表明某件事情嚴重錯誤,並且捆綁包生命週期更改不應通過。由於我們將檢測情況(通過捆綁)和處理(通過框架)分開,所以拋出Exception
是唯一合理的事情。
我認爲Josh Bloch的建議不合時宜。 throws Exception
沒有錯。它給你選擇拋出你喜歡的任何異常,並且OSGi框架將處理它。
請注意,您從不需要自己調用這些方法。