【问题标题】:Is it possible to create my own unchecked Exception in Java?是否可以在 Java 中创建我自己的未经检查的异常?
【发布时间】:2012-03-11 10:02:09
【问题描述】:

是否可以在 Java 中创建我自己的未经检查的异常?

基本上,我愿意

  • 有我自己的异常类,MyUncheckedException
  • 这不会让我更新所有调用引发此异常的方法的方法,并使用大量自己的throws

【问题讨论】:

  • 请注意,向现有代码添加新异常基本上会破坏与 API 先前版本的兼容性。当然,如果你只添加 RuntimeExceptions 它仍然是二进制兼容的,但我个人认为更糟糕的是:不知情的人现在会链接到新版本并突然出现奇怪的错误.. ugh.

标签: java error-handling


【解决方案1】:

是的。从RuntimeException 扩展MyUncheckedException。但是,以下是来自documentation

指南

一般来说,不要抛出 RuntimeException 或创建 RuntimeException 的子类仅仅是因为你不想成为 为指定您的方法可以抛出的异常而烦恼。

以下是底线准则:如果客户可以合理地 期望从异常中恢复,使其成为受检异常。如果 客户端无法从异常中恢复,使其成为 未经检查的异常。

【讨论】:

  • 执行此操作的代码是什么样的?你能显示从RuntimeException扩展的代码吗?
【解决方案2】:

我想你只是想继承 RuntimeException?

【讨论】:

    【解决方案3】:

    是的 - 从 RuntimeException 派生它

    确保您这样做是出于正确的原因:通常,运行时异常表示编程错误,而不是程序可能以某种有意义的方式对错误做出反应。

    【讨论】:

      【解决方案4】:

      是的。根据 Effective Java -

      虽然 Java 语言规范没有要求,但有一个强大的 约定错误保留给 JVM 使用,以指示资源不足、不变故障或其他导致无法继续执行的情况。鉴于这个约定几乎被普遍接受,最好不要实现任何新的 Error 子类。因此,您实现的所有未经检查的 throwable 都应该继承 RuntimeException(直接或间接)。

      建议使用以下未经检查的异常:-

      1. 使用运行时异常来指示编程错误。
      2. 如果您认为某个条件可能允许恢复,请使用已检查异常;如果没有,请使用运行时异常。如果不清楚是否可以恢复,最好使用未经检查的异常。

      关于记录未经检查的异常 -

      使用 Javadoc @throws 标记记录每个未检查的异常 方法可以抛出,但不要使用 throws 关键字来包含未选中 方法声明中的异常。

      【讨论】:

        【解决方案5】:

        我会在这里留下一个例子,以防万一:

        public class MyCustomException extends RuntimeException {
        
            public MyCustomException(String message) {
                super(message);
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-09
          • 1970-01-01
          • 2010-10-03
          • 2015-07-01
          • 2013-12-21
          • 2016-01-17
          • 2015-05-24
          相关资源
          最近更新 更多