gpt4 book ai didi

java - 使用现有的 try/catch block 或重复的 catch block 而不引发异常

转载 作者:行者123 更新时间:2023-12-02 01:18:49 25 4
gpt4 key购买 nike

考虑以下 try/catch block :

try {
throwCheckedException();
} catch (IOException e) {
doStuffWithException(e);
}

在上面的代码块中,throwCheckedException 有机会抛出已检查的异常,因此我需要一个调用 doStuffWithException 的 catch 子句。但是,假设我想向此 block 添加一条附加语句:

if (!someBoolean) {
throw new IOException("someBoolean must be true, got false.");
}

我应该利用 catch block 并将上述代码插入到 try block 中,还是复制 catch block 中的内容会更好,如下所示?

try {
throwCheckedException();
if (!someBoolean) {
doStuffWithException(
new IOException("someBoolean must be true, got false.")
);
}
} catch (IOException e) {
doStuffWithException(e);
}

最佳答案

抛出异常是昂贵的操作。因此,如果您考虑两种选择 - throw 和不 throw ,那么不 throw 是更好的方法。

但是,在 try-block 中使用异常作为 doStuffWithException 的输入参数,感觉代码很小。因此,我建议重构异常处理逻辑,使其不依赖异常作为输入参数。

如果您根据异常中的某些数据来处理异常情况 - 提取该数据并传递给 handle 方法。基本上,不要将异常用作 DTO 或 POJO(因为异常不是用于此目的)。

总结一下,我建议使用以下代码片段:

try {
throwCheckedException();
if (!someBoolean) {
Data data = createData();
handle(data);
}
} catch (IOException e) {
Data data = createDataFromMessage(e.getMessage());
handle(data);
}

或者,减少 try-block 内的嵌套:

try {
throwCheckedException();
} catch (IOException e) {
Data data = createDataFromMessage(e.getMessage());
handle(data);
}

if (!someBoolean) {
Data data = createData();
handle(data);
}

关于java - 使用现有的 try/catch block 或重复的 catch block 而不引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58121965/

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