atitit.架构设计---方法调用结果使用异常还是返回值
atitit.架构设计---方法调用结果使用异常还是返回值
1. 应该返回BOOL类型还是异常 1
2. 最终会有四种状况,抛出异常、返回特殊值、阻塞、超时 1
3. 异常的优缺点点 1
4. java BlockingQueue的提示 2
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 }
转载于:https://www.cnblogs.com/attilax/p/5963910.html
atitit.架构设计---方法调用结果使用异常还是返回值相关推荐
- 目录:四种Qt程序的架构设计方法
四种常见的关于Qt程序的架构设计方法: 使用MVC设计模式MVC是Model-View-Controller的缩写,是应用程序开发中常用的设计模式.在Qt中,可以使用QAbstractItemMode ...
- vb获得mysql的值,VB.NET调用MySQL存储过程并获得返回值的方法
本文实例讲述了VB.NET调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体实现方法如下: Dim myConnectionString As String = "Data ...
- Java调用MySQL并返回数据_Java调用MySQL存储过程并获得返回值的方法
本文实例讲述了Java调用MysqL存储过程并获得返回值的方法.分享给大家供大家参考.具体如下: private void empsInDept(Connection myConnect,int de ...
- python 调用控制台并获取返回结果_Java调用Python脚本并获取返回值
在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在 ...
- C#调用存储过程详解(带返回值、参数输入输出等)
C#调用存储过程详解(带返回值.参数输入输出等) 这篇文章主要介绍了C#调用存储过程的方法,结合实例形式详细分析了各种常用的存储过程调用方法,包括带返回值.参数输入输出等,需要的朋友可以参考下 本文实 ...
- java 调用linux 脚本并获取返回值
大家好,我是烤鸭: 今天分享下java 调用 shell脚本 并获取返回值. 代码实践 String cmd = "df -h"; StringBuffer sb = new St ...
- java方法的重载与覆盖的返回值类型
public class A extends B{//下面的是方法的覆盖(重写overRiding)public void riding(){System.out.println("this ...
- C++调用python并获取其返回值
C++调用python并获取其返回值 先上实例代码: C++代码: //初始化py环境 // Py_Initialize();PyRun_SimpleString("import sys&q ...
- 中台之上(十三):探讨支持组装式开发的业务架构设计方法
"颗粒度"问题 面向服务的设计一直都有一个话题,就是服务的"颗粒度"问题,无论是SOA还是微服务,都很难把握颗粒度.首先,SOA在实际操作中并不是真的关心颗粒度 ...
最新文章
- 区块链兼容以太坊智能合约
- 985博士分享Pytorch与Tensorflow,哪个更值得你学习?
- go 变量大写_28. 一文了解Go语言中编码规范
- 【NOIP2002】【Luogu1032】字串变换
- 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果及其他。
- Linux CentOS 7安装Tomcat7的完整步骤。
- 华为服务器 修改为传统模式,电脑设置成服务器模式
- android-倒计时工具类
- AlteraFPGA使用通用SPIFlash
- 读懂职场则规潜 潜伏者的上位秘诀
- 怎么把win10右下角的隐藏图标调出来(把倒三角调出来)
- SQL Server-------数据库恢复技术
- MFC连接sqlite3数据库
- D. Colored Rectangles
- bim土建免费软件“为什么我选不到图元”6大图元讲解
- 单缝斜入射衍射_傅里叶变换解夫琅禾费衍射问题的几个例子_2
- linux编译安装icu,Icu+配置使用说明
- MacOS Big Sur 11.0 — 苹果操作系统 开发者预览测试版
- java.util.Date和java.sql.Date的区别和相互转化
- es analyzer分词