java - 如何在 Java 中为错误情况实现 `finally`

标签 java exception

如果发生任何错误,我需要一些代码来触发。基本上我需要一个 finally block ,它只在出现异常时执行。我会这样实现它:

HttpURLConnection post(URL url, byte[] body) throws IOException {
    HttpURLConnection connection = url.openConnection();
    try {
        OutputStream out = connection.getOutputStream();
        try {
            out.write(body);
        } finally {
            out.close();
        }
        return connection;
    } catch (Throwable t) {
        connection.disconnect();
        throw t;
    }
}

看起来不错——除了无法编译:我的函数不能抛出 Throwable

我可以重写:

    } catch (RuntimeException e) {
        connection.disconnect();
        throw e;
    } catch (IOException e) {
        connection.disconnect();
        throw e;
    }

但即便如此,我 a) 遗漏了所有错误并且 b) 每当我更改我的实现以抛出不同类型的异常时都必须修复此代码。

是否可以通用地处理这个问题?

最佳答案

您可以使用 finally block ,并添加一个标志来指示成功。

bool success = false;
try {
    //your code
    success = true;
    return retVal;
} finally {
    if (!success) {
        //clean up
    }
}

关于java - 如何在 Java 中为错误情况实现 `finally`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4403949/

相关文章:

Java 拖动绘制的球

java - 从 Eclipse 运行应用程序时未调用 repaint()?

java - 用 Java 编写类似展开的清理代码

PHP:命名空间类、类加载和异常导致奇怪的行为

java - JMS中不可信数据反序列化安全问题

java - Eclipse 和 R 中的 StatET

java - 如何使用 HornetQ 延迟 JMS 消息的传递?

exception - Scala:无法捕获闭包内抛出的异常

python - 使用 mypy 时正确输入 python 中的异常/错误元组

java - 我想从抛出Java程序的当前异常中提取一个字符串