標籤:style blog http java 使用 os io 問題
atitit.架構設計---方法調用結果使用異常還是返回值
1. 應該返回BOOL類型還是異常 1
2. 最終會有四種狀況,拋出異常、返回特殊值、阻塞、逾時 1
3. 異常的優缺點點 1
4. java BlockingQueue的提示 2
5. 方案::兩個都使用,一個api返回bool,一個throw 異常... 2
1. 應該返回BOOL類型還是異常
現在我遇到一個問題,我有一個函數,它要實現的功能是啟動一個線程,然後讓此線程監視一個事件。
但我應該返回BOOL類型還是異常哪?
作者:: 老哇的爪子 Attilax 艾龍, EMAIL:[email protected]
轉載請註明來源: http://blog.csdn.net/attilax
2. 最終會有四種狀況,拋出異常、返回特殊值、阻塞、逾時
3. 異常的優缺點點
異常的很大的好處是你可以讓異常類帶出更多的資訊,而且可以設計一個清晰的異常類繼承體系。
不過,有時候兒韓式bool更 方便...if語句黑頭的時候兒...
4. java BlockingQueue的提示5. 方案::兩個都使用,一個api返回bool,一個throw 異常...
|
首先,看看BlockingQueue提供的常用方法:
|
可能報異常 |
返回布爾值 |
可能阻塞 |
設定等待時間 |
|
入隊 |
add(e) |
offer(e) |
put(e) |
offer(e, timeout, unit) |
|
出隊 |
remove() |
poll() |
take() |
poll(timeout, unit) |
|
查看 |
element() |
peek() |
無 |
無 |
好,上點源碼你就更明白了。以ArrayBlockingQueue類為例:
對於第一類方法,很明顯如果操作不成功就拋異常。而且可以看到其實調用的是第二類的方法,為什嗎?因為第二類方法返回boolean啊。 Java代碼
1 public boolean add(E e) {
2 if (offer(e))
3 return true;
4 else
5 throw new IllegalStateException("Queue full");//隊列已滿,拋異常
6 }
7
8 public E remove() {
9 E x = poll();
10 if (x != null)
11 return x;
12 else
13 throw new NoSuchElementException();//隊列為空白,拋異常
14 }