gpt4 book ai didi

java - Java 异常安全性能否变得不那么丑陋?

转载 作者:行者123 更新时间:2023-11-29 05:58:49 24 4
gpt4 key购买 nike

给定以下代码:我们需要锁定模型,然后启动一个事务(这可能会抛出异常,因此我们必须确保释放锁),然后做一些类似于获取数据库连接的事情(这可能抛出异常),然后做一些可能抛出异常的事情,要求交易被恢复。这是 Java 6,所以我们没有可用的 Java 7 好东西。

SomeClass someMethod() 
throws SomeException {
acquireWriteLock();
try {
startTransaction();
try {
DBConnection d = openDBConnection();
try {
doStuff(d);
commitTransaction();
} finally {
d.close();
}
} catch (SomeException e) {
handleSomeException(e);
revertTransaction();
throw e;
} catch (Throwable t) {
revertTransaction(); // Error: method must return a value of SomeClass
}
} finally {
releaseWriteLock();
}
}

是否可以将其重写为更易读且更简洁?

只是为了好玩:当你看到以下内容时,你会怎么做?

DBConnection d = null;
try {
acquireWriteLock();
startTransaction();
d = openDBConnection();
try {
doStuff(d);
commitTransaction();
} catch (SomeException e) {
handleSomeException(e);
revertTransaction();
}
} finally {
d.close();
releaseWriteLock();
}

最佳答案

如果您切换到 Java 7,您可以大大简化它。否则,您应该做的事情可能不多。

可以尝试以下想法:

  • 将DB连接+事务管理+锁管理重构为公共(public)基类中的通用方法,每个事务类型都有一个子类

  • 将DB连接+事务管理+锁管理重构为final类中的通用方法,事务类型接口(interface)和实现类。

但是,除非这种特定模式重复多次,否则这种重构可能不是一个好主意。 (你会创造一个本地的习语,读者必须在意思变得清晰之前学习这个习语。)

关于java - Java 异常安全性能否变得不那么丑陋?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973250/

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