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


    绝大多数方法和构造器对于传递给他们的参数值都会有某些限制。例如索引值必须是非负数,对象引用不能为null,等等。

    应该在文档中清楚地指明所有这些限制,并且在方法体的开头出检查参数,以强制施加这些限制。这是“应该在发生错误之后尽快检测出错误”

    这一普遍原则的一个具体情形。

    如果传递无效的参数值给方法,这个方法在执行之前先对参数进行了检查,那么它很快就会失败,并且清楚的抛出适当的异常。如果没有检查它

    的参数就有可能发生几种情况。该方法可能在处理过程中失败,并且产生令人费解的异常。更糟糕的是,该方法可以正常返回,但是返回的结果

    可能是一个错误的结果。最糟糕的情况是,该方法可以正常返回,但是却使得某个对象处于被破坏的状态,将来在某个不确定的时候,在某个不

    相关的点上会引发错误。

    对于公有的方法,要用Javadoc的@throws标签 在文档中说明违反参数值限制时会抛出的异常。通常这样的异常为IllegalArgumentException,

    IndexOutOfBoundsException。

    对于未被导出的方法,也就是该方法不会被客户端代码调用的方法,作为包的创建者,你可以控制这个方法将在哪些情况下被调用,因此你可以确保

    只将有效的参数值传递进来。因此非公有的方法应该使用断言(Assertion)来检查参数。

    断言假设 assert关键词后面的 表达式为真,如果传进来的实际参数值跟我们的假设不一样,就会自动抛出AssertionError,而不需要显示手动抛出。

    但是并不是每个方法我们都需要去检查参数的有效性,例如在有些情况下,有效性的检查工作非常昂贵,或者根本是不切实际的,而且有效性的检查

    已隐含在计算过程中完成。

    简而言之,每当编写方法或者构造器的时候,应该考虑它的参数有哪些限制。应该把这些限制写在方法上面的注释文档中,并且考虑实施这些有效性

    检查的开销,权衡利弊,最后进行显示的来实施这些有效性的检查。养成这样的习惯非常重要。

  • 相关阅读:
    BestCoder Round #29 1003 (hdu 5172) GTY's gay friends [线段树 判不同 预处理 好题]
    POJ 1182 食物链 [并查集 带权并查集 开拓思路]
    Codeforces Round #288 (Div. 2) E. Arthur and Brackets [dp 贪心]
    Codeforces Round #287 (Div. 2) E. Breaking Good [Dijkstra 最短路 优先队列]
    Codeforces Round #287 (Div. 2) D. The Maths Lecture [数位dp]
    NOJ1203 最多约数问题 [搜索 数论]
    poj1426
    POJ 1502 MPI Maelstrom [最短路 Dijkstra]
    POJ 2785 4 Values whose Sum is 0 [二分]
    浅析group by,having count()
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4482288.html
Copyright © 2020-2023  润新知