遵循Joshua Bloch的Effective Java中使用的樣式並與this問題的答案一致,在過去的Java SE環境中,我使用了AssertionErrors來實現永遠不可能執行的代碼路徑。我可以在EJB方法中拋出一個AssertionError嗎?
看着Java EE中,在EJB 3.1規範說
如果bean方法遇到系統異常或錯誤,就應該從bean方法錯誤簡單地傳播到容器(即bean方法不必捕捉異常)。
並且稍微向下,它表示在非ApplicationException的情況下必須丟棄相關的EJB實例。據我所知,如果在後續請求中需要該EJB的另一個實例,那麼容器會從池中取出一個,或者在必要時創建一個新的實例,因此應該沒有與此關聯的問題(當然,除非是一個@Singleton EJB)。
在會話bean方法中使用AssertionError來指示編程錯誤是否合適/好用?還是有更適合的Throwable子類型?
我最擔心的是一個錯誤可能會以某種方式對容器產生負面影響,但正如你所說,這應該不成問題。 至於使用'AssertionError's,開啓Enum's其中一個值的情況是缺少的情況實際上是Joshua Bloch使用它的一個例子。 ;-)我猜這取決於Enum的種類,但是如果它具有很多「語義」含義,那麼不考慮其中一個可能的值可能會被視爲更多的編程錯誤。 – 2015-02-16 07:45:13