Java 在异常中存储对对象的引用?

Java 在异常中存储对对象的引用?,java,exception,reference,Java,Exception,Reference,在异常中存储对对象的引用是反模式吗? 我正在考虑这样做,因为我希望以后能够访问这些对象以进行异常处理(可能是在另一个具有更高抽象级别的层中),例如,使用有关引发异常的上下文的信息呈现用户友好的消息 我不太确定是否有副作用,可能是内存泄漏或其他我必须知道的事情 有什么建议吗?请记住,出于各种原因对异常进行序列化是很常见的,您不想将域对象拖到其中。相反,将可能有用的核心信息提取到异常类的不可变属性中(通常是“简单”类型,如String、long或UUID)。可以使用域对象作为异常构造函数的参数。在调

在异常中存储对对象的引用是反模式吗? 我正在考虑这样做,因为我希望以后能够访问这些对象以进行异常处理(可能是在另一个具有更高抽象级别的层中),例如,使用有关引发异常的上下文的信息呈现用户友好的消息

我不太确定是否有副作用,可能是内存泄漏或其他我必须知道的事情


有什么建议吗?

请记住,出于各种原因对异常进行序列化是很常见的,您不想将域对象拖到其中。相反,将可能有用的核心信息提取到异常类的不可变属性中(通常是“简单”类型,如
String
long
UUID
)。可以使用域对象作为异常构造函数的参数。在调用
super(message)
时,我甚至会经常使用属性(Groovy字符串使这更容易)。

您可以提供额外的信息,但要做到简洁,例如在jdk中存在提供关于他自己的额外数据的异常。在javadoc中的这个示例中,您将看到返回行号、列名等的附加方法。在异常构造函数中,所有这些信息都传递给实例,但不是类似于完整的
ScriptEngine
,您可以这样做。但是,不要将一些重量级对象放在异常情况下,并将它们从getter公开给客户机,让客户机对这个对象做一些事情。

最好的方法是在异常构造函数中接收这个对象,构建一条友好的消息并将其传递给超类构造函数。 向最终用户显示异常消息从来都不是一个好主意,它们只针对其他开发人员