【问题标题】:Storing references to objects in exceptions?在异常中存储对对象的引用?
【发布时间】:2017-07-01 22:17:38
【问题描述】:

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

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

有什么建议吗?

【问题讨论】:

    标签: java exception reference


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以提供额外的信息,但要简洁,例如在 jdk 中存在提供关于他自己的额外数据的异常。在这个来自 javadoc ScriptException 的示例中,您将看到返回行号、列名等的其他方法。在异常构造函数中,所有这些信息都传递给了实例,但不是像整个 ScriptEngine 这样的东西,您可以这样做。但是不要排除一些重量级的对象并将它们从 getter 暴露给客户端,让他对这个对象做一些事情。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-16
          • 1970-01-01
          • 2012-10-28
          • 1970-01-01
          • 2011-06-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多