atitit.架构设计---方法调用结果使用异常还是返回值
atitit.架构设计---方法调用结果使用异常还是返回值
2. 最终会有四种状况,抛出异常、返回特殊值、阻塞、超时 1
5. 方案::两个都使用,一个api返回bool,一个throw 异常... 2
1. 应该返回BOOL类型还是异常
现在我遇到一个问题,我有一个函数,它要实现的功能是启动一个线程,然后让此线程监视一个事件。
但我应该返回BOOL类型还是异常哪?
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: 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 }