gpt4 book ai didi

java - 在Java中将检查的异常包装成未经检查的异常?

转载 作者:IT老高 更新时间:2023-10-28 21:08:13 25 4
gpt4 key购买 nike

我在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,这是一个未经检查的异常,但会提供更多信息关于你为什么扔它。如果它们描述了您重新抛出的问题,则可以使用其他好的 RuntimeExceptionIllegalStateExceptionTypeNotPresentExceptionUnsupportedOperationException

还请注意,让您的线程捕获 RuntimeException 并至少记录它总是一个好主意。至少这样你就明白为什么你的线程会消失了。

关于java - 在Java中将检查的异常包装成未经检查的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/484794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com