Archiwum

Archive for Sierpień 2011

Konstrukcja try inaczej

21/08/2011 Dodaj komentarz

Sposób na przedstawienie inaczej tego co jest wyrażana za pomocą konstrukcji try. Normalnie try w całej okazałości prezentuje się tak:

try {
   // wykonywane w try
} catch (NullPointerException e) { 
   // wykonywane w catch, w tym przypadku dla NullPointerException 
} finally { 
   // wykonywane w finally 
}

A ostatnio wpadłem na sposób jak można to zrobić zastępując całość specjalnym obiektem. W kodzie wygląda to jak poniżej:

// deklaracja
OtherTry otherTry = new OtherTry();
otherTry.addCatchBlock(new CatchBlock<NullPointerException>() {
    public void doWith(NullPointerException e) {
        // wykonywane w catch, w tym przypadku dla NullPointerException 
    }
});
otherTry.addFinallyBlock(new FinallyBlock() {
    public void doIt() {
        // wykonywane w finally 
    }
});
// użycie
otherTry.start();
    // wykonywane w try
otherTry.close();

Jest to trochę „sztuka dla sztuki” 🙂 choćby z powodu tego że zapis jest bardziej rozwlekły. Choć obiekt można zdefiniować tylko raz i potem używać w wielu miejscach (wtedy to tylko 2 linijki).
Całość ma jednak jedną wadę: nie zadziała z checked exception (kompilator nie pozwoli, i trzeba użyć starego try_a).

Ciekawej jest to, że można takie dziwo wyprodukować. W przypadku wyjątku pożądany kod obsługi się wykona, i jeszcze można zdefiniować sekcje finally. Możliwe jest to poprze dobranie się do bieżącego wątku i czasowe zmodyfikowanie domyślnego sposobu w jaki obsługiwane są nieprzechwycone wyjątki.
Czytaj dalej…

Kategorie:Java Tagi: ,