Praxis 19. Consider the drawback to the throws clause.

Throws 給開發者帶來的好處

透過 Throws 的幫助,開發者可以一眼在 method signature 看出,這個 method 可能產生什麼副作用,這是一個理想的情況下,但有時候會發現有的開發者會這麼作:

1
2
public void theCalling() throws Exception{
}

這樣的資訊,能透露的訊息相當有限,絕大部分可能是偷懶所造成。

當 Worker Method 不小心產生了一個新的 exception

Worker method 指的是一些基礎的方法,到處都會調用到的,整個 Project 裡調用的比例非常高,像是 logging method 、某些 util 的方法。

試想像一個情境,你手邊的專案開發了四年,已經有成千上萬行程式碼, logging method 也被調用過無數次了,此時 logging method 需要調整為 log to cloud ,所以他會增加多個不同的 exception ,這時候,可能有兩種方法可以解決:

  1. logging method 自行 catch ,解決這個問題。
  2. 讓 logging method 往外拋,在 method signature 加上 throws。

如果這些新出現的 exception 都是 logging method 可以 handle 的,那問題也許不會太嚴重,一但有些 exception 是 logging method 無法處理的,必須要往外拋,那他一連串的調用方就都需要調整,這變動的程度可以說是相當的大。

在專案開始的時候, Exception 的設計必須要小心,但在軟體以及外圍環境極速變動的狀況下,即便設計的很完整,還是有可能會發生悲劇,所以要清楚的了解 throws 帶來的好與壞。