2010-04-21 46 views

回答

26

我將此用作一般規則。

  • 如果有意義,請使用預定義的Java異常。例如,如果你的代碼有某種I/O錯誤,拋出一個IOException就可以了。
  • 如果您需要區分try/catch塊中的兩個異常,請僅使用異常層次結構。很多時候,單個組件拋出一個具有不同錯誤消息的異常類型是非常好的。如果用戶不能真正做任何事情來專門處理錯誤,請使用相同的通用異常類。如果用戶能夠以不同的方式處理它們,那麼應該使用層次結構。
  • 對於層次結構,不要讓來自基本異常的不同組件的所有異常繼承。沒有真正的理由這樣做。如果消費者想要捕捉任何東西,他們可以簡單地捕捉異常。
  • 對於包的位置,我把一個Exception類和它所關聯的代碼放在一起。因此,如果我在a.b.c包中有一個BusinessService,那麼我就有一個a.b.c.BusinessException。我不喜歡將所有異常放入異常包中。它只是使它很難找到。
2

該語言沒有指定什麼要求,用戶定義的類應該放入哪些包。只要該類延伸java.lang.Throwable,就可以拋出該類。

+3

我認爲提問者知道這一點。他的問題更多地涉及最佳實踐。 – Sergio 2013-03-11 10:11:57

4

您可以在任何地方創建您的Exception類。

重要的是擴展一個現有的Exception類(實際上是java.lang.Throwable)。例如java.lang.Exceptionjava.lang.RuntimeException。第一個是檢查異常,而擴展RuntimeException將導致未檢查的異常;兩者之間的差異詳述如下here

11

我把我所有的自定義異常放入com.company.project.exception包中。我這樣做,而不是讓他們「靠近」他們出現的地點。

這裏是我的推理:如果給定的異常只在某個地方出現在一個或兩個服務類中,那麼它可能不是一個足夠的例外,應該擁有它自己的類。只有當我看到一個常見的主題出現在多個地方時,我纔會去創建自定義Exception類的麻煩。如果它在多個地方出現,那麼就沒有合適的「附件」包,因此特定於異常的包似乎是正確的選擇。

相關問題