【发布时间】:2008-11-19 16:40:25
【问题描述】:
在不创建新 Throwable 的情况下添加通用方式来向 Throwable 添加信息是否有益?
我经常看到这样的代码:
try {
foo();
} catch (Exception e) {
throw new Exception(e.getMessage() + " extra info=" + blah, e);
}
添加Throwable.setProperty(String key, String value)这样会不会更好,这样上面的代码就变成了下面的样子?
try {
foo();
} catch(Exception e) {
e.setProperty("extra info", blah);
throw e;
}
额外的信息可以在消息和堆栈列表之间打印(每行一个)。
好处:
1. 不需要创建新的Throwables 只是为了添加额外的信息。
2.堆栈跟踪不会有多层原因跟踪
(因此更容易阅读)
3. 减少创建额外堆栈跟踪的成本。
【问题讨论】:
-
如果您担心 Throwable.fillInStackTrace() 的成本,那么我敢说您做错了:)(假设您对“成本”的定义与 CPU 周期有关。)
-
我不担心新的 Throwable 会占用大量 CPU ——但即使移除少量浪费的 CPU 也是有益的。