gpt4 book ai didi

java - 我的 AutoCloseable.close() 实现能否检测到潜在的异常?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:41 28 4
gpt4 key购买 nike

当实现 AutoCloseable 以使用 Java 7 try-with-resources 语句时,我想知道 try block 中是否有异常。例如:

class C implements AutoCloseable {
@Override
public void close() {
if (exceptionOccurred)
something();
else
somethingElse();
}
}

为了说明这一点:

try (C c = new C()) {

// This should cause a call to "something()"
if (something)
throw new RuntimeException();

// This should cause a call to "somethingElse()"
else
;
}

现在,从理解how the try-with-resources statement translates to bytecode ,我想那是不可能的。但是是否有任何(可靠的!)通过检测/反射/一些未记录的编译器功能的技巧允许我从 AutoCloseable.close() 中访问上面的 RuntimeException

注意:我是一名 API 设计者,我无法控制 API 消费者的 try-with-resources 代码。因此,必须在 AutoCloseable 站点

执行实现

最佳答案

通常的做法是在 try block 的末尾显式调用。例如:

try (CustomTransaction transaction = ...) {
// Do something which might throw an exception...

transaction.commitOnClose();
}

然后在 close 中,根据 commitOnClose() 是否被调用,您可以中止事务或提交事务。

它不是自动的,但实现起来非常简单 - 而且非常易于阅读。

关于java - 我的 AutoCloseable.close() 实现能否检测到潜在的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21353508/

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