绝大多数方法和构造器对于传递给它们的参数值都会有某些限制。如索引值不能为负数,对象引用不能为null。应该在文档中清楚指明限制,并且在方法体的开头处检查参数,以强制施加这些限制,以便在错误发生之后尽快检测出错误和确定错误根源。

对于公有方法,要用javadoc的@throws标签在文档中说明违法参数限制时会抛出的异常,就像这样:

/*** Returns a BigInteger whose value is {@code (this mod m}).  This method* differs from {@code remainder} in that it always returns a* <i>non-negative</i> BigInteger.** @param  m the modulus.* @return {@code this mod m}* @throws ArithmeticException {@code m} &le; 0* @see    #remainder*/public BigInteger mod(BigInteger m) {if (m.signum <= 0)throw new ArithmeticException("BigInteger: modulus not positive");BigInteger result = this.remainder(m);return (result.signum >= 0 ? result : result.add(m));
}

对于未被导出的方法,作为包的创建者,可以控制方法在那些情况下被调用,因此,非公有方法通常应该使用断言来检查参数。

考虑为对象排序的方法,列表中所有的对象必须是可以互相比较的,如果对象不能相互比较,某个比较操作会抛出ClassCastException,这正是sort方法要做的事,因此,提前检查列表是否可以互相比较无太大意义,但这样会失去失败原子性(没有在出错的时候马上抛出异常或错误,对于这个例子,出错的时候应该是传入的参数不能互相比较,而不是在比较的时候)。

在设计方法时,应该使它们尽可能地通用,对参数的限制应该越少越好。

转载于:https://www.cnblogs.com/13jhzeng/p/5743115.html

第38条:检查参数的有效性相关推荐

  1. Effective Java之检查参数的有效性(三十八)

    检查参数的有效性实际上是满足了这一条普遍原则: 应该在发生错误之后尽快检测出错误. 例子: 有个数据库查询的例子,传入一个id,查出一个Student对象,然而返回null,如果没有及时检查这个实例是 ...

  2. 方法——检查参数的有效性

    检查参数的有效性 绝大多数方法和构造方法对于传递给它们的参数都会有某些限制,比如对象引用不能为null,比如必须是正数等.你应该在文档中(或者注释中)清楚地指出所有这些限制,并且在方法体的开头检查参数 ...

  3. Effective-Java 检查参数有效性

    49. 检查参数有效性 本章(第 8 章)讨论了方法设计的几个方面:如何处理参数和返回值,如何设计方法签名以及如何记载方法文档. 本章中的大部分内容适用于构造方法和其他普通方法. 与第 4 章一样,本 ...

  4. R语言在读取数据的时候自动加上X. 检查列名的有效性

    最近在用R代码进行长宽数据转换的时候出现了X.问题,经过一番搜索才发现是R会检查列名的有效性. 使用read.Table或者read.csv系列函数的时候有一个参数check.names参数,默认为T ...

  5. linux信号检查参数相同,linux信号函数

    alarm(设置信号传送闹钟) 相关函数 signal,sleep 表头文件 #include 定义函数 unsigned int alarm(unsigned int seconds); 函数说明 ...

  6. SQL Server 2008 R2 系统配置检查器的检查参数和妨碍性问题的解决办法

    在安装SQL Server的时候经常会遇到安装失败,这是很伤脑筋的事情,花费很多时间和精力也不一定能够解决. 针对于规则检查导致的安装错误,如果有一份列表能够说明规则以及解决办法将会给我们提高极大的帮 ...

  7. JS逆向:【硬干货】手把手实战某条_signature参数破解(下)——WebSocket与JS函数

    本文仅供学习交流使用,请勿用于商业用途或不正当行为 如果侵犯到贵公司的隐私或权益,请联系我立即删除 前两篇文章: js逆向:[硬干货]手把手实战某条_signature参数破解(上) js逆向:[硬干 ...

  8. 基于 RICS-V 架构的单周期 38 条指令处理器设计(含源码及实验报告)

    一.概述   之前有专门的写过两篇博文来介绍基于 RICS-V 架构的单周期九条指令处理器设计,并提供了相关的代码结构介绍,之后我又对其进行了拓展,且修补了之前源码中存在的一些小问题,并将指令集从九条 ...

  9. 你如何检查参数的合法性?

    点击上方"服务端思维",选择"设为星标" 回复"669"获取独家整理的精选资料集 回复"加群"加入全国服务端高端社群「后 ...

  10. 【卡法 常用 ckl.js 库】: js汇合 表单验证 cookie设置 日期格式 电话手机号码 email 整数 小数 金额 检查参数长度...

    [卡法 常用js库]: js汇合 表单验证  cookie设置  日期格式  电话手机号码  email  整数  小数  金额   检查参数长度 // +---------------------- ...

最新文章

  1. Android 绘制同心圆 (2个圆叠加在一起)
  2. Android 自定义圆形图片 CircleImageView
  3. C#中子线程操作主线程中窗体上控件的方法
  4. Nature论文解读 | 基于深度学习和心脏影像预测生存概率
  5. matlab kfda,SVD与KFDA相结合人脸识别-matlab-毕业论文
  6. 利用Python进行「基金投资组合优化」(一)
  7. 网页设计工资一般多少_初级会计师就业前景怎么样?工资一般多少?
  8. springboot请求处理
  9. CentOS 下重装 jdk
  10. Linux Redhat下安装Jenkins
  11. java项目连接jboss中数据库_月光软件站 - 编程文档 - Java - JBOSS3.2.5中MYSQL数据库连接池的建立与测试...
  12. 数据集可视化——tile(贴砖)
  13. 如何用PADS打开AD的PCB文件?
  14. Mybatis中取 Oracle自增序列 重复值
  15. iMac 2019一体机开箱体验,其内存是什么牌子,怎样换iMac内存?
  16. 最好用的录音软件是哪个?
  17. 高等数学Mathematica实验题——费马素数猜想(Fn=2^(2^n)+1为素数)的证伪(Verification of Fermat's Prime Number Function)
  18. gammatone 滤波器详解及其MATLAB代码实现
  19. 机器翻译评价指标之BLEU原理介绍及代码实现
  20. 解决打开CHM文件后,右侧显示空白

热门文章

  1. gogs仓库代码拉取不需要用户账号验证问题
  2. GoLand添加一个已有项目的相关配置
  3. 编译修改OpenCV的rpath
  4. 关于软件比赛:想当太子,就不要陪别人读书
  5. 编译编译时,用不到的库,一定不要链接
  6. NPAPI最简单的代码
  7. 有多么巨大的工作量,要交接一个月?
  8. 关于蜂蜜牛奶供养佛菩萨的两段经文
  9. 编译好的C一执行就崩溃,第一句输出都没有,是怎么回事?
  10. 无锡硕放机场建议改名为金苏机场