Java 使用现有的try/catch块或复制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/catch块:

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);
}