2012-04-01 14 views
9

Czy uważa się za złe programowanie napisać próbę i złapać w klauzuli końcowej?spróbuj złapać w końcu sekcja

Mam w mojej głównej metody fileInputStream, który chcę zamknąć. Chcę umieścić .close() w końcu, więc zamknie się bez względu na wszystko. Nie chcę dodawać deklaracji rzutów do głównej metody, ponieważ jest to główna metoda: P

}finally{ 
     try { 
      commandFile.close(); 
     } catch (IOException e) { 
      throwException(e); 
     } 
    } 

czy wszystko jest w porządku? Dzięki

+8

Tak to jest OK, a czasem jest to konieczne. –

+1

Jeśli zamierzasz ponownie rzucić wyjątek, nie potrzebujesz próby złapania. Spróbowanie catch jest konieczne, ponieważ masz zrobić coś z wyjątkiem (przy minimalnym minimum, logując się), jeśli zdecydujesz, że nie, to nie jest to konieczne. – SJuan76

+0

Muszę wydrukować coś do System.err, a następnie System.exit To właśnie robi metoda throwExcpetion (e): –

Odpowiedz

9

Wzór potrzeby try/catch w metodach ostatecznych jest niestety powtarzającym się wzorem w Java 6 i wcześniej. Twierdzę, że w rzeczywistości jest to zła praktyka, ale nie taka, której naprawdę można uniknąć w Javie 6 (patrz poniżej dla Javy 7).

Dodatkowym problemem jest to, że wszelkie nowe wyjątki zgłoszone w bloku finally zastąpią wyjątki, które zostały zgłoszone przed osiągnięciem tego bloku.

W języku Java 7 jest specjalnie dla przypadków, w których zasoby muszą zostać zamknięte (większość przypadków użycia dla konstrukcji try/finally/try/catch) nowej konstrukcji try-with-resources. Spowoduje to również przechwycenie wyjątków pierwotnych i dodatkowych.

Stosując ten konstrukt jest więc obecnie najlepsze praktyki w JDK 7 i tak kod pokażesz jest więc złe praktyki w Javie 7.

+0

Jestem zobowiązany do używania tylko Java 6. Szkoła nie ma jeszcze zatwierdzonej wersji 7. –