2015-07-15 33 views
7

Lubię tworzyć klasy Exception, których nazwy wskazują na zgłaszane i zgłaszane problemy specyficzne dla aplikacji.Jak uniknąć powtórzeń w niestandardowych klasach wyjątków Javy

Aby je zdefiniować, zwykle definiuje się nowy class, którego super-klasa to typ Exception.

Z powodu wielu wspólnych konstruktorów w klasie rodzic Exception, ogólnie podklasa wygląda mniej więcej tak:

package com.example.exception; 

/** 
* MyException is thrown when some application-level expectation is not met. 
*/ 
public class MyException extends Exception { 

    public MyException() { 
     super(); 
    } 

    public MyException(String message) { 
     super(message); 
    } 

    public MyException(Throwable cause) { 
     super(cause); 
    } 

    public MyException(String message, Throwable cause) { 
     super(message, cause); 
    } 

} 

Patrząc na to z perspektywy DRY uważam, że podejście to uciążliwe, szczególnie, gdy zdefiniowane są hierarchie Exception.

Jestem zaznajomiony z narzędziami, takimi jak Lombok, które pomagają w zmniejszeniu liczby powtórzeń dla typowych wzorców Java; czy są jakieś sugestie dotyczące narzędzi, które rozwiązują ten problem powtarzania klas wyjątków?

+2

Wygląda dobrze dla mnie. –

+0

@SotiriosDelimanolis Uważam, że punktem, do którego stara się OP jest to, że jeśli ma 10 niestandardowych klas wyjątków, musi powtórzyć ten kod we wszystkich tych klasach wyjątków. – CKing

+2

@CKing Nie, rozumiem. Byłoby dobrze ze mną. –

Odpowiedz

4

Jeśli tworzysz wyjątki "biznesowe", nie powinieneś kopiować wszystkich konstruktorów z Exception. Zamiast tego utwórz wyjątki korzystające z obiektów biznesowych. Na przykład, jeżeli wniosek nie powiodło który jest modelowany przez obiekt biznesowy Request można utworzyć RequestFailedException z jednego konstruktora:

public RequestFailedException(Request request) { 
    super("Request to " + request.getUrl() + " failed."; 
} 

Można nawet przechowywać odwołanie do obiektu Request w polu i zapewnić getter tak że metoda obsługująca wyjątek może uzyskać więcej informacji o tym, co się dzieje.

+1

Zgadzam się, że dla niektórych 'Wyjątków' dobrze jest opisać odpowiednie informacje, ale nie wszystkie" wyjątki "mają ten wymóg; czy większość "wyjątków" to po prostu niestandardowe opakowania? Po prostu denerwujące jest to, że dla tego rodzaju 'Wyjątków' tworzony jest cały ten duplikat kodu. –

+1

Myślę, że my (programiści Javy) często zbyt często zgłaszamy wyjątki. Na przykład spróbuj zaoferować metody sprawdzenia pewnego warunku wcześniej zamiast implementacji metody, która zgłasza wyjątek, jeśli warunek nie zostanie spełniony. Ponadto, jeśli coś pójdzie nie tak, staraj się być odporny i zwróć coś, co może nie być idealne, ale nadal przydatne dla osoby dzwoniącej. – hzpz

+1

Chociaż całkowicie zgadzam się z tym, co mówi ta odpowiedź, to nie jest to, o co prosił OP. –