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

时间:2017-07-01 22:17:38

标签: java exception reference

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

我不太确定是否存在副作用,也许内存泄漏会导致其他一些我不得不知道的事情......

任何建议?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以提供其他信息,但要简明扼要,例如在jdk中存在提供有关他自己的其他数据的异常。在这个来自javadoc ScriptException的示例中,您将看到返回行号,列名等的其他方法。在异常构造函数中,所有这些信息都传递给实例但不是整个ScriptEngine之类的东西,并且您可以做类似的事情这个。但是,不要将一些重量级的物品置于例外,并将它们从吸气剂暴露给客户,让他对这个物体做些什么。

答案 2 :(得分:0)

最好的方法是在Exception构造函数中接收此对象,构建友好消息并将其传递给超类构造函数。 为最终用户显示Exception消息绝不是一个好主意,它们仅适用于其他开发人员。