当前位置:  开发笔记 > 编程语言 > 正文

将已检查的异常包装到Java中未经检查的异常中?

如何解决《将已检查的异常包装到Java中未经检查的异常中?》经验,为你挑选了2个好方法。

我在java中有这个工厂方法:

public static Properties getConfigFactory() throws ClassNotFoundException, IOException {
    if (config == null) {
        InputStream in = Class.forName(PACKAGE_NAME).getResourceAsStream(CONFIG_PROP);
        config = new Properties();
        config.load(in);
    }
    return config;
}

我想将两个已检查的异常转换为未经检查的异常.最好的方法是什么?

我应该捕获异常并使用捕获的异常作为内部异常抛出一个新的RuntimeException吗?

有没有更好的方法来做到这一点,或者我是否应该首先尝试这样做?

编辑:
只是为了澄清.这些异常将是致命的,因为配置文件基本上是程序的操作,所有异常都将被捕获并记录在我的程序的顶层.

我的目的是避免不必要的抛出异常,将异常添加到调用我的工厂的每个方法的签名中.



1> Eddie..:

RuntimeException只有当客户端无法从任何问题中恢复时,才应使用A. 做你正在谈论的事情偶尔是合适的,但更多时候是不合适的.

如果您使用的JDK> = 1.4,那么您可以执行以下操作:

try {
  // Code that might throw an exception
} catch (IOException e) {
  throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
  throw new RuntimeException(e);
}

并且重新投掷RuntimeException将包含其中的原始原因.这样一来,线程顶端有人抓住了RuntimeException- 你的线程确实抓住了,RuntimeException所以他们不会只是默默地死掉,对吧? - 至少可以打印出原因的FULL堆栈跟踪.

但正如其他人所说并会说的那样,例外情况会被检查.只有当您肯定您的客户无法从您作为未经检查的例外重新抛出的问题中恢复时才这样做.

注意:RuntimeException如果可用的话,更好的是使用更具体的未经检查的异常.例如,如果您的方法抛出a的唯一原因ClassNotFoundException是因为缺少配置文件,则可以重新抛出a MissingResourceException,这是一个未经检查的异常,但会提供有关您抛出它的原因的更多信息.RuntimeException如果他们描述你正在重新抛出的问题,那么使用的其他好处是IllegalStateException,TypeNotPresentExceptionUnsupportedOperationException.

另请注意,线程始终捕获RuntimeException并且至少记录它总是一个好主意.至少通过这种方式你可以理解为什么你的线程会消失.


在可能的情况下,我更愿意保持我的例外通用并远离自定义的例外.
远离自定义异常是可以的,这就是为什么我提到了几个已经作为Java的一部分存在的最有用的RuntimeExceptions.更具体的异常在调试过程中确实有帮助.
啊啊.有什么你不能做出不必要的冗长吗?

2> MicSim..:

这是一个很好的异常处理最佳实践汇编.

从那里得到两点:

调用者代码无法对异常执行任何操作 - >使其成为未经检查的异常

调用者代码将根据异常中的信息采取一些有用的恢复操作 - >使其成为已检查的异常

并且您可以抛出RuntimeException有或没有内部异常,具体取决于调用者可以使用它做什么.如果你没有重新抛出内部异常,那么你应该在你的方法中记录它,如果重要的话.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有