Jam*_*hon 29 java exception checked-exceptions
我在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;
}
Run Code Online (Sandbox Code Playgroud)
我想将两个已检查的异常转换为未经检查的异常.最好的方法是什么?
我应该捕获异常并使用捕获的异常作为内部异常抛出一个新的RuntimeException吗?
有没有更好的方法来做到这一点,或者我是否应该首先尝试这样做?
编辑:
只是为了澄清.这些异常将是致命的,因为配置文件基本上是程序的操作,所有异常都将被捕获并记录在我的程序的顶层.
我的目的是避免不必要的抛出异常,将异常添加到调用我的工厂的每个方法的签名中.
Edd*_*die 30
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,TypeNotPresentException和UnsupportedOperationException.
另请注意,线程始终捕获RuntimeException并且至少记录它总是一个好主意.至少通过这种方式你可以理解为什么你的线程会消失.
| 归档时间: |
|
| 查看次数: |
27707 次 |
| 最近记录: |