例如,当使用Preconditions.checkArgument时,错误消息是否应该反射(reflect)所检查支票的通过情况或失败情况?
import static com.google.common.base.Preconditions.*;
void doStuff(int a, int b) {
checkArgument(a == b, "a == b");
// OR
checkArgument(a == b, "a != b");
}
最佳答案
对于前提条件检查,在异常详细信息中说明需求比仅说明事实更具信息性。这也导致更自然地阅读代码:
documentation提供以下示例:
有两点值得注意:
在该示例之后,更好的消息将是:
checkArgument(a == b, "a must be equal to b"); // natural!
您甚至可以更进一步,并在异常消息中捕获
a
和b
的值(请参阅有效的Java 2nd Edition,项目63:在详细消息中包括故障捕获信息):checkArgument(a == b, "a must be equal to b; instead %s != %s", a, b);
陈述事实的替代方法不太容易在代码中读取:
checkArgument(a == b, "a != b"); // awkward!
checkArgument(a == b, "a is not equal to b"); // awkward!
请注意,用Java代码读取一个 boolean 表达式,然后跟一个与该表达式矛盾的字符串来读取是多么尴尬。
陈述事实的另一个缺点是,对于复杂的前提条件,它的信息量可能较少,因为用户可能已经知道该事实,但是并没有违反实际要求。
相关问题