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

我在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?

有没有更好的方法来做到这一点,还是应该尝试这样做呢?

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

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

只有当客户端无法从任何问题中恢复时,才应使用RuntimeException。做你所说的话偶尔是适当的,但更常见的是不合适。

如果您使用的是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,所以他们不会只是默默地死,对吧? – 至少可以打印出完整的堆栈跟踪的原因。

但是正如其他人所说,并会说,例外情况是由于某种原因而被检查的。只有当您积极地表示您的客户无法从您重新发布的问题中恢复为未经检查的异常时,才能做到这一点。

注意:优于RuntimeException将使用更具体的未检查异常(如果有)。例如,如果您的方法可能抛出ClassNotFoundException的唯一原因是因为配置文件丢失,您可以重新抛出一个MissingResourceException,这是一个未经检查的异常,但提供了有关为什么抛出它的更多信息。如果他们描述您重新启动的问题,则使用其他良好的RuntimeExceptions是IllegalStateException,TypeNotPresentException和UnsupportedOperationException。

还要注意,它始终是一个好主意,您的线程捕获RuntimeException和至少日志。至少这样你就明白为什么你的线程会消失。

http://stackoverflow.com/questions/484794/wrapping-a-checked-exception-into-an-unchecked-exception-in-java

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:将检查的异常包装到Java中的未检查的异常中?