Vorrei discutere una domanda sulle migliori pratiche relative alla gestione delle eccezioni (ad es. in Java). Normalmente, quando si impostano gli attributi di una classe, controllo gli argomenti nei setter per la validità, e se gli argomenti non sono validi, lancio una IllegalArgumentException.
Oltre ai setter, a volte anche il costruttore della classe consente di impostare alcuni valori per gli attributi. Quindi devo anche verificare gli argomenti nel costruttore per la validità. Ciò, tuttavia, comporterebbe la duplicazione del codice. Posso solo pensare ad una soluzione per questo problema: invece di impostare direttamente il valore dell'attributo nel costruttore, chiamo il setter, che poi convalida anche il valore dato.
Tuttavia, poiché i setter sono pubblici, questo ha il problema che chiamerei un metodo sovrascrivibile all'interno del costruttore, il che è male. Per risolvere nuovamente questo problema, potrei rendere definitivi i setter, ma questo non l'ho mai visto.
Un'altra possibilità che potrei pensare, in teoria, è di avere un privato o molti metodi privati che controllano gli argomenti per la validità e che sono chiamati da entrambi i costruttori e setter. Ma questo porterebbe a un numero ancora maggiore di codice. Quali ritieni che siano le migliori pratiche per questo problema?