Java 使用现有的try/catch块或复制catch块而不引发异常
考虑以下try/catch块:Java 使用现有的try/catch块或复制catch块而不引发异常,java,exception,try-catch,Java,Exception,Try Catch,考虑以下try/catch块: try { throwCheckedException(); } catch (IOException e) { doStuffWithException(e); } 在上面的块中,throwCheckedException有可能抛出已检查的异常,因此我需要一个catch子句来调用dostufwithexception。但是,假设我想在此块中添加一条附加语句: if (!someBoolean) { throw new IOExcepti
try {
throwCheckedException();
} catch (IOException e) {
doStuffWithException(e);
}
在上面的块中,throwCheckedException
有可能抛出已检查的异常,因此我需要一个catch子句来调用dostufwithexception
。但是,假设我想在此块中添加一条附加语句:
if (!someBoolean) {
throw new IOException("someBoolean must be true, got false.");
}
我应该利用catch块并简单地将上述代码插入try块,还是复制catch块中的内容(如下面所示)是更好的做法
try {
throwCheckedException();
if (!someBoolean) {
doStuffWithException(
new IOException("someBoolean must be true, got false.")
);
}
} catch (IOException e) {
doStuffWithException(e);
}
引发异常的操作成本很高。所以,若你们考虑两种选择——投掷和不投掷,那个么不投掷是更好的选择 但是,在
try block
中使用exception作为dostufwithexception
的输入参数,感觉像是一个小代码。所以,我建议重构异常处理逻辑,使其不依赖于异常作为输入参数
如果您根据异常中的某些数据处理异常情况,请提取该数据并传递给handle
方法。基本上,不要将异常用作DTO或POJO(因为异常不是用于此目的的)
总而言之,我建议编写如下代码片段:
try {
throwCheckedException();
if (!someBoolean) {
Data data = createData();
handle(data);
}
} catch (IOException e) {
Data data = createDataFromMessage(e.getMessage());
handle(data);
}
或者,要减少内的嵌套,请尝试块:
try {
throwCheckedException();
} catch (IOException e) {
Data data = createDataFromMessage(e.getMessage());
handle(data);
}
if (!someBoolean) {
Data data = createData();
handle(data);
}
引发异常的操作成本很高。所以,若你们考虑两种选择——投掷和不投掷,那个么不投掷是更好的选择
但是,在try block
中使用exception作为dostufwithexception
的输入参数,感觉像是一个小代码。所以,我建议重构异常处理逻辑,使其不依赖于异常作为输入参数
如果您根据异常中的某些数据处理异常情况,请提取该数据并传递给handle
方法。基本上,不要将异常用作DTO或POJO(因为异常不是用于此目的的)
总而言之,我建议编写如下代码片段:
try {
throwCheckedException();
if (!someBoolean) {
Data data = createData();
handle(data);
}
} catch (IOException e) {
Data data = createDataFromMessage(e.getMessage());
handle(data);
}
或者,要减少内的嵌套,请尝试块:
try {
throwCheckedException();
} catch (IOException e) {
Data data = createDataFromMessage(e.getMessage());
handle(data);
}
if (!someBoolean) {
Data data = createData();
handle(data);
}