gpt4 book ai didi

java - 在 AutoCloseable close() 中检测异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:58:46 25 4
gpt4 key购买 nike

我想构建一个自定义的 AutoCloseable 类,这样我就可以将其转换为:

try {
begin();
doThings();
commit();
} finally {
if (transactionIsActive()) rollback();
}

进入更容易

try (Transaction t = begin()) { // too bad I have to store it in t though I don't use it
doThings();
}

Transaction 在这里是 AutoCloseable,在 close() 中它会根据需要提交或回滚事务。

但要实现这一点,我需要在 Transaction.close() 中检测 try block 内是否发生了异常,或者它是否正常完成。这可能吗?

如果它需要从新的异常中解析堆栈跟踪,那没关系。更简单的编程将值得带来的微小性能影响。

最佳答案

我能想到的最接近的仍然需要手动将交易成功标记为 block 的最后一条语句:

class Transaction implements AutoCloseable {
private boolean rollback = true;

public void success() {
rollback = false;
}

public void close() {
if (rollback) doRollback();
else doCommit();
// …
}
}

class Main {
public static void main(String[] args) {
try (Transaction t = new Transaction()) {
doThings();
t.success();
}
}
}

关于java - 在 AutoCloseable close() 中检测异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8376260/

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