我最近开始使用Sonar作为代码审查工具。 当我运行Sonar分析我的代码时, 它将打印堆栈跟踪视为违反Java编码标准的行为。 作为堆栈跟踪的替代,我尝试了:
e.getcause()
但这并没有像堆栈跟踪一样清除异常。
class YourClass
{
Logger logger = Logger.getLogger(YourClass.class.getName());
...
public void someMethod() throws YourException
{
try
{
// your code here
} catch (NullPointerException e)
{
String message = "Unexpected NullPointerException in processing!";
logger.log(Level.ERROR, message, e);
throw new YourException(message, e);
}
}
}
几点想法:
我从标题中推断出您正在使用 e.printStackTrace()
。这不会“清除异常”,因此我不确定您在这一点上的问题实际上是什么。在Java中,“清除异常”在这种情况下根本没有任何意义。
e.printStackTrace()
“不是一个好主意”,因为它写入标准输出。更好的方法是将这样的详细信息写入日志文件以供以后诊断,而不是将其放在用户面前(尽管这可能取决于程序实际运行的方式)。您的运行时环境可能对使用标准输出有所要求。
e.getCause()
将返回,如果可用,可能是导致异常e
的“根本原因”的“基础异常”。大多数堆栈跟踪将在“Caused by: ...”之后显示此初始堆栈转储。
如果您选择尝试自己捕获和显示/记录异常-您可以使用e.printStackTrace(PrintStream s)
或e.printStackTrace(PrintWriter s)
。
最好使用日志工具,如Matt所建议的。