有什么理由抛出“异常”并立即捕获它吗?
此代码来自我们的项目,生产代码:
if (changedToNull) {
try {
throw new Exception();
} catch (Exception e) {
log.debug("changedToNull", e);
}
}
开发人员不再与我们合作。
为什么有人会直接抛出并捕获并记录它?Exception
此代码来自我们的项目,生产代码:
if (changedToNull) {
try {
throw new Exception();
} catch (Exception e) {
log.debug("changedToNull", e);
}
}
开发人员不再与我们合作。
为什么有人会直接抛出并捕获并记录它?Exception
主要目的是在输入此块以进行调试时获取调用堆栈,但可以将其重写为下一步:if
if (changedToNull) {
log.debug("changedToNull", new Exception("changedToNull is true"));
}
假设永远不应该这样,并且您希望让调用堆栈了解它是如何发生的,您可以以这种方式进行。changedToNull
true
创建调用堆栈非常昂贵,因此您应该通过检查 too 的值(假设您使用 )来确保启用该级别,如下所示:debug
isDebugEnabled()
log4j
if (changedToNull && log.isDebugEnabled()) {
...
}
这对我来说似乎是一个无用的代码。有些人提到它会给你一个堆栈跟踪,但由于它只是创建一个新的异常,堆栈跟踪不太可能提供太多有用的信息(除非在罕见的调试情况下)。
我会重新排列代码,使其看起来像这样,甚至避免抛出异常:
if (changedToNull) {
log.debug("changedToNull");
}
如果开发人员想要查看代码(在开发过程中),那么理想情况下,他们应该使用 IDE 内置的调试工具。
一般的经验法则是,除非代码在生产中有用,否则它可能不存在,并且将其保留在那里有点不好的做法。这当然不包括测试。