差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

java:effective_java:exceptions:favor_the_use_of_standard_exceptions [2022/04/13 23:43]
tony [Introduction]
java:effective_java:exceptions:favor_the_use_of_standard_exceptions [2023/06/25 09:48]
行 1: 行 1:
-{{tag>​java effective_java exceptions}} 
-====== Effective Java - Favor the use of standard exceptions ====== 
-===== Introduction ===== 
-與之前[[java:​effective_java:​lambdas_and_streams:​favor_the_use_of_standard_functional_interfaces|Favor the use of standard functional interfaces]]強調概念類似,盡量reuse現有東西。書中的範例主要都是針對unchecked exception,去說明適用情境:​ 
-  * NullPointerException:​ 不允許輸入參數為null時,就會使用它。可以直接使用Objects.requireNonNull去做檢查。 
-  * IndexOutOfBoundsException:​ 輸入參數超過可接受的範圍大小,就會使用它。 
-  * IllegalArgumentException:​ 輸入參數不合法,就會使用它,但請撇除上面2個情境。 
-  * llegalStateException:​ 當method在不適當的時候被呼叫,就會使用它。其實以物件命名想表達的是物件可能處於error state而無法正常工作,因而拋出llegalStateException。有的時候,這個例外我也有看過被用在絕對不可能發生的情況下去拋出llegalStateException;不過應該要盡量避免這種情境,因為單元測試可能寫不出來。StackOverflow有人對javadoc和effective java描述的使用情境認為有所不同,有興趣可以看[[https://​stackoverflow.com/​questions/​12698275/​whats-the-intended-use-of-illegalstateexception|這裡]],我認為effective java描述的情境可應用的場合會比javadoc廣泛拉。 
-  * UnsupportedOperationException:​ 呼叫了不支援的method,就會使用它。我想這個例外,應該也適用於某一個method接收http method,但不支援PUT的時候,client卻傳了PUT的情境吧?​ 
-  * ConcurrentModificationException:​ 如果某個method偵測到multiple threads存取時,就有可能會拋這個例外。書中是說,這個是提示意味不一定準確,而我也沒拋過這個例外,因為通常會去避免發生這種情境,而不會做複雜的檢查。 
-最後就是這個item也有提到不要直接使用Exception、Throwable、RuntimeException或Error,我認為其實是要呼應Item 73: Throw exceptions appropriate to the abstraction。 
-===== Note ===== 
-Effective Java第三版Item 72。 
-===== Reference ===== 
-  * Effective Java, 3/e 
  
-=====    ===== 
----- 
-\\ 
-~~DISQUS~~