差異處
這裏顯示兩個版本的差異處。
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~~ |