だから私はtry/finallyブロックを持っています。finallyブロックでいくつかのメソッドを実行する必要があります。ただし、これらのメソッドはそれぞれ例外をスローする可能性があります。ネストされたfinallyブロックなしで、これらすべてのメソッドが呼び出される(または試行される)ことを保証する方法はありますか?
これは私が今していることです、それはかなり醜いです:
protected void verifyTable() throws IOException {
Configuration configuration = HBaseConfiguration.create();
HTable hTable = null;
try {
hTable = new HTable(configuration, segmentMatchTableName);
//...
//various business logic here
//...
} finally {
try {
try {
if(hTable!=null) {
hTable.close(); //This can throw an IOException
}
} finally {
try {
generalTableHelper.deleteTable(configuration, segmentMatchTableName); //This can throw an IOException
} finally {
try {
generalTableHelper.deleteTable(configuration, wordMatchTableName); //This can throw an IOException
} finally {
generalTableHelper.deleteTable(configuration, haplotypeTableName); //This can throw an IOException
}
}
}
} finally {
HConnectionManager.deleteConnection(configuration, true); //This can throw an IOException
}
}
}
これを行うためのよりエレガントな方法はありますか?