2021/04/08

[筆記] Effective Java #71 避免不必要地使用受檢異常

Effective Java 3rd 簡體中文版筆記 #71 避免不必要地使用受檢異常
受檢異常 (checked exception) 會強迫 API 調用者一定要處理它,不論是用 try-catch 接住或是再往外傳遞皆可,過度的使用會讓調用者感到負擔。在正常使用該 API 時,無法阻止異常的產生,且一旦發生異常,調用者有能力去處理。若上述的條件成立,那麼丟出受檢異常就是合理的。
try {
    ...
} catch (SomeCheckedException e) {
    System.out.exit(1);
}
如果調用者對於收到受檢異常無法處理 (如上),採用終止程式的策略,那不如單純丟出運行時異常。當產生越來越多的受檢異常時,對 API 調用者來說是件麻煩事,應盡量減少這類情況。應先考慮該受檢異常是否需要丟出去,再來考慮是否要將受檢異常改為運行時異常 (runtime exception)  來取代。或是像之前提到的,提供一狀態測試方法,讓調用者知道該如何處理,但如果物件在多執行緒下,會被外部改變狀態,那就不適合。像是 actionPermittedaction 中間有機會被改變狀態,或是 actionPermitted 方法必須重複 action 方法。
if (obj.actionPermitted(args)) {
    obj.action(args);
} else {
    ...
}
轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2021/03/effective-java-71-checked-exception.html

沒有留言:

張貼留言