第38条:检查参数的有效性

绝大多数方法和构造器对于传递给它们的参数值都会有某些限制。如索引值不能为负数,对象引用不能为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方法要做的事,因此,提前检查列表是否可以互相比较无太大意义,但这样会失去失败原子性(没有在出错的时候马上抛出异常或错误,对于这个例子,出错的时候应该是传入的参数不能互相比较,而不是在比较的时候)。

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

时间: 2024-08-15 01:10:59

第38条:检查参数的有效性的相关文章

第三十八条:检查参数的有效性

绝大多数方法和构造器对于传递给他们的参数值都会有某些限制.例如索引值必须是非负数,对象引用不能为null,等等. 应该在文档中清楚地指明所有这些限制,并且在方法体的开头出检查参数,以强制施加这些限制.这是"应该在发生错误之后尽快检测出错误" 这一普遍原则的一个具体情形. 如果传递无效的参数值给方法,这个方法在执行之前先对参数进行了检查,那么它很快就会失败,并且清楚的抛出适当的异常.如果没有检查它 的参数就有可能发生几种情况.该方法可能在处理过程中失败,并且产生令人费解的异常.更糟糕的是

isalpha (int c)检查参数c是否为英文字母

/*义函数 int isalpha (int c) 函数说明 检查参数c是否为英文字母,在标准c中相当于使用 (isupper(c)||islower(c))做测试. 返回值 若参数c为英文字母,则返回TRUE,否则返回NULL( 0 ). 附加说明 此为宏定义,非真正函数 范例*/ /* 找出str 字符串中为英文字母的字符*/ #include<ctype.h> #include<stdio.h> void main() { char str[]="[email pr

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

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

38条PHP优化代码!让你的程序更简洁!

其实,很多在刚刚入行做程序员的同学,往往会进入到一个误区,就是不达目的决不罢休!在通常情况下,新手程序员的代码写的会比较繁琐,整体来说就是因为对于代码的不熟悉!所以,在你成为真正大牛的时候再回头看看之前写的代码,会感觉曾经的自己弱爆了,哈哈!那么,培养一个良好的编写习惯和方法是尤为重要的!千锋教育就总结了以下经验优化,希望可以给给位准大牛们带来帮助! 1.如果一个方法能被静态,那就声明他为静态的,速度可提高1/4; 2.echo的效率高于print,因为echo没有返回值,print返回一个整型

Android Api 检查参数状态Api

转载请注明出处:http://blog.csdn.net/droyon/article/details/39938677 在进行Android应用程序开发中,android提供了一个很好的工具类,来进行参数的检查. Preconditions.checkNotNull(horiz, "missing horiz"); 这个类叫做Preconditions,在framework/base/core/java/com/android.internal/util中. 其实现为: public

vue router获取整条路径参数

$route.path 当前路由对象的路径,如'/vi$route.query 请求参数,如/foo?user=1获取到query.user = 1$route.router 所属路由器以及所属组件信息$route.matched 数组,包含当前匹配的路径中所包含的所有片段所对应的配置参数对象.$route.name 当前路径名字 原文地址:https://www.cnblogs.com/xinchenhui/p/9570662.html

mybatis 插入一条记录 参数为map的写法

xml: <insert id="insertUser" parameterType="java.util.Map"> insert into user ( id, <foreach collection="columnMap" item="value" index="key" separator=","> ${key} </foreach> ) va

《Effective Java》第7章 方法

第38条:检查参数的有效性 对于公有的方法,要用javadoc的@throws标签(tag)在文档中说明违反参数值限制时会抛出的异常.这样的异常通常为IllegalArgumentException, IndexOutOfBoundsException或NullPointerException. 非公有的方法通常应该使用断言(assertion)来检查它们的参数,具体做法如下所示: 第39条:必要时进行保护性拷贝 没有对象的帮助时,虽然另个类不可能修改对象的内部状态,但是对象很容易在无意识的情况

《Effective Java 2nd》第7章 方法

目录 第38条 检查参数的有效性 第39条 必要时进行保护性拷贝 第40条 谨慎设计方法签名 第41条 慎用重载 第42条 慎用可变参数 第43条 返回零长度的数组或集合,而不是null 第44条 为所有导出的API元素编写文档注释 关注点:可用性.健壮性.灵活性 第38条 检查参数的有效性 在编写方法或者构造器的时候,应该考虑参数有哪些限制,并显式检查 第39条 必要时进行保护性拷贝 如果类具有从客户端得到或者返回到客户端的可变组件,为了维持不可变性,必要时进行保护性拷贝. 否则,在文档中写明