gpt4 book ai didi

java - 在不创建新 Throwable 的情况下向 Throwable 添加信息的通用方法

转载 作者:行者123 更新时间:2023-11-30 07:39:37 27 4
gpt4 key购买 nike

在不创建新 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. 不需要为了添加额外信息而创建新的 Throwable。 2. Stack traces不会有多层cause traces (因此更容易阅读) 3. 降低创建额外堆栈跟踪的成本。

最佳答案

链式异常已经负责删除冗余堆栈帧。也就是说,您只会看到给定的堆栈帧列出一次。这是一个见仁见智的问题,但我认为缺少链式异常是一个缺点。

RuntimeException 的劝阻扩展会很好。这在这方面可能会有所帮助。

中间栈帧可能希望在栈展开时添加它们自己的上下文。这可能会导致属性(property)遭到破坏。应该有一种机制来处理这个问题,例如给定属性名称的一堆值。

这在核心 Java 中永远不会发生,但是没有什么可以阻止您将此约定用于您自己的异常类。

关于java - 在不创建新 Throwable 的情况下向 Throwable 添加信息的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/302533/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com