Tengo un bloque try/finally. Necesito ejecutar varios métodos en el bloque finally. Sin embargo, cada uno de esos métodos puede arrojar una excepción. ¿Hay alguna forma de garantizar que todos estos métodos se invoquen (o intenten) sin bloques finalmente anidados?En Java, ¿hay alguna forma de garantizar que se invoquen varios métodos en un bloque finally?
Esto es lo que hago en este momento, que es bastante feo:
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
}
}
}
¿Hay una manera más elegante de hacer esto?
Puede extraerlos en un método de limpieza. – Reimeus
'¿Hay alguna forma de garantizar que todos estos métodos se invoquen (o intenten) ** sin bloques finalmente anidados??' –