TOMÁŠ HUBÁLEK BLOG: BAVTE SE PŘIMĚŘENĚ…

Vyjímky v části finally

Written By: Tomáš Hubálek - Jul• 15•04

Pozor na vyhazování vyjímek v Javě v části finally. Pokud vyhodíte vyjímku v části finally, může to překrýt skutečnou příčinu problému.

Příklad

class ExceptionTest {
static class Ex0 extends Exception {}
static class Ex1 extends Exception {}
static class Ex2 extends Exception {}
public static void main(String args[]) throws Exception {
try {
throw new Ex0();
} catch (Exception e) {
throw new Ex1();
} finally {
throw new Ex2();
}
}
}

vyhodí vyjímku Ex2.

K napsání tohoto spotu mě inspiroval kolega, který se ptal co udělat v následujícím případě:

void doSomethingWithFile(String filename) {
FileReader in = null;
try {
in = new FileReader(new File(filename));
while ((c = in.read()) != -1)
out.write(c);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (in != null) {
try { in.close(); }
catch (IOException) {
// ?? what to do with this exception
}
}
}
}

Uvědomil jsem si že exception v bloku finally obvykle jen loguju a jinak s ní nic nedělám. Jeho návrh byl tam dát také vyhození vyjímky.

Poradil jsem mu ať tuto exception také jenom zaloguje a novou exception nevyhazuje, protože ta by překryla tu původní, kde může být skutečná příčina.

Jak to řešíte vy?

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply

Your email address will not be published. Required fields are marked *