次のコードが与えられた場合: モデルをロックし、トランザクションを開始する必要があります (例外がスローされる可能性があるため、ロックが解放されていることを確認する必要があります)。次に、データベース接続を取得するようなことを行います (例外がスローされる可能性があります)。 )、次に、トランザクションを元に戻す必要がある例外をスローする可能性のあるいくつかのことを行います。これは 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();
}