章节:方法设计
第 49 项:检查参数有效性
- 参数限制:
方法和构造函数通常对参数值有限制(例如非负索引、非空引用)。
这些约束必须在方法开始时记录和检查。
- 验证的重要性:
尽早检测错误,以避免方法中出现意外故障或不正确的行为。
不检查参数的方法可能会导致难以调试的崩溃。
- 异常文档:
使用 @throws javadoc 标签来记录违反约束时引发的异常。
常见异常:illegalargumentexception、indexoutofboundsexception、nullpointerexception。
参数检查示例:
public static int mod(int x, int y) { if (y <= 0) { throw new illegalargumentexception("divisor deve ser positivo."); } return x % y; }
- objects.requirenonnull 的使用:
java 7 中引入,用于检查对象的可空性。
返回验证后通过的值:
this.m = objects.requirenonnull(m, "parâmetro 'm' não pode ser nulo");
- 范围检查(java 9):
checkfromindexsize、checkfromtoindex 和 checkindex 方法用于检查列表和数组中的索引。
灵活性较差,主要用于集合。
**
assert x > 0 : "Valor de x deve ser positivo";
- 特殊情况:
构建者应始终检查存储参数的有效性以供以后使用。
对于成本高昂的检查可以例外,其中检查在计算过程中是隐式的。
- 隐式验证示例:
collections.sort(list) 假设对象是相互比较的。验证发生在排序过程中。
- 异常翻译:
当隐式检查抛出错误的异常时,使用“异常翻译”来抛出正确的异常。
- 限制的灵活性:
方法应设计得尽可能通用,并施加尽可能少的限制。
- 结论:
记录并实施对方法和构造函数的参数有效性检查。练习对于避免未来的错误和促进调试至关重要。