gpt4 book ai didi

java - 在 try catch 中处理两个不同的连接关闭

转载 作者:行者123 更新时间:2023-12-01 16:33:22 25 4
gpt4 key购买 nike

如果你要打开连接,通常你要做的是 try-catch-finally

try {
doSomething();
} catch(Exception e) {
// handle the exception
} finally {
close();
}

在我的场景中,我有两个 catch 和两个不同的关闭:正常情况下为 close() ,如果抛出 StrangeException 则为 closeStrange() 。

我想出了这样的东西:

try {
doSomething();
} catch(StrangeException e) {
closeStrange();
throw new MyExc(e);
} catch(Exception e) {
close();
throw new MyExc(e);
}
close();

我想知道以这种方式处理这种情况是否安全。

编辑:

可能还不清楚:我只想宣布一次闭幕式。closeStrange() 如果抛出 StrangeException,如果抛出另一个异常或没有抛出另一个异常,则 close()。

最佳答案

不,您目前处理此问题的方式并不安全:

  • 您没有使用 finally block ,因此抛出的任何非异常都会让您离开而无需关闭连接
  • 您正在“处理”任何异常,这几乎肯定是不合适的

您可能想要:

boolean closedStrangely = false;
try {
...
} catch (StrangeException e) {
closeStrangely();
closedStrangely = true;
throw e; // Or maybe not, or maybe throwing some custom exception
} finally {
if (!closedStrangely) {
close();
}
}

请注意,如果 closeStrangely() 抛出异常,这将尝试“正常”关闭它。如果您不希望出现这种行为,请在调用 closeStrangely 之前将 closeStrangely 设置为 true。

编辑:即使您想在某些情况下引发自定义异常,您几乎肯定不应该捕获异常

关于java - 在 try catch 中处理两个不同的连接关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055352/

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