【问题标题】:Best way to do Error Handling进行错误处理的最佳方法
【发布时间】:2012-04-19 22:13:29
【问题描述】:

我正在考虑通过异常实现更好的错误处理方法。当我深入研究代码并想返回错误时,我有两个选择:

  1. 引发扩展运行时异常的异常。
  2. 将错误消息对象与我的响应一起传递。这允许每个级别在需要时通过查看错误消息来处理错误。

我喜欢1。但是,假设我创建了一个界面:

public interface Interface {
  method1();
  method2();
}

现在,在这种类型的合同中,我还没有看到将方法声明为的接口:

method1() throws ExtendedRuntimeException;
method2() throws ExtendedRuntimeException;

指定实现需要处理扩展运行时异常的更简洁的方法是什么?

【问题讨论】:

  • 一般来说,声明“抛出 ”的方法是说“我不会处理异常”。因此,没有在合约中明确指定 this 的方法应该被视为此类的处理程序。

标签: java design-patterns exception-handling interface runtimeexception


【解决方案1】:

您需要一种综合方法。 在您的应用程序中设计异常处理机制时,您将需要设计强制实现处理异常的接口。这些是检查异常。

您还必须事先决定处理所有异常的层或决定如何处理异常。所有较低层都将异常向上传递,即将异常向上冒泡。您可以通过创建异常子类或简单地按原样抛出异常来做到这一点。最好是创建一个异常子类,其中包含更多详细信息,例如错误代码/消息等。

是的,许多设计的接口确实将 throws 附加到方法定义中。

HTH ~阿尤斯曼

【讨论】:

    【解决方案2】:

    Sudoer,恕我直言,您无法控制接口的实现者处理运行时(即未经检查的)异常。

    就像@Ayusman 提到的那样,您可以声明并要求实现者处理已检查的异常,但对于运行时异常,它总是有义务他们不需要声明它。另外,对于未检查的异常,作为实现者,我可以抛出我自己的运行时异常,作为接口设计者,你还没有声明。

    这是真的,因为您只声明了一个合同,但您没有足够的上下文来了解可能出现的运行时异常类型。希望我能在这里传达这个想法。

    我发现这些很有用:

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      关于异常错误处理有很多思想流派。可以在这里找到一篇长但内容丰富的文章:http://articles.vconst.com/2009/08/error-handling-and-exceptions-in-java.html

      他实际上建议为运行时异常放置一个 throws 声明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-21
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        • 2014-09-10
        相关资源
        最近更新 更多