Bri*_*ris 12 java exception preconditions guava
例如,当使用Preconditions.checkArgument时,错误消息是否应该反映通过案例或有问题的检查失败的情况?
import static com.google.common.base.Preconditions.*;
void doStuff(int a, int b) {
checkArgument(a == b, "a == b");
// OR
checkArgument(a == b, "a != b");
}
Run Code Online (Sandbox Code Playgroud)
pol*_*nts 21
对于前置条件检查,在异常详细消息中声明要求比仅仅陈述事实更具信息性.它还可以更自然地阅读代码:
该文档提供以下示例:
这允许诸如的构造
Run Code Online (Sandbox Code Playgroud)if (count <= 0) { throw new IllegalArgumentException("must be positive: " + count); }被更紧凑的替换
Run Code Online (Sandbox Code Playgroud)checkArgument(count > 0, "must be positive: %s", count);
有两点值得注意:
在该示例之后,更好的消息将是:
checkArgument(a == b, "a must be equal to b"); // natural!
Run Code Online (Sandbox Code Playgroud)
您甚至可以更进一步捕获异常消息中的值a和b(请参阅Effective Java 2nd Edition,Item 63:Include failure capture information in detailed messages):
checkArgument(a == b, "a must be equal to b; instead %s != %s", a, b);
Run Code Online (Sandbox Code Playgroud)
说明事实的替代方法在代码中不太自然:
checkArgument(a == b, "a != b"); // awkward!
checkArgument(a == b, "a is not equal to b"); // awkward!
Run Code Online (Sandbox Code Playgroud)
注意在Java代码中读取一个布尔表达式,后面跟一个与该表达式相矛盾的字符串是多么的尴尬.
陈述事实的另一个缺点是,对于复杂的前提条件,它可能信息量较少,因为用户可能已经知道了这一事实,但不知道违反的实际要求是什么.
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |