Controllo sempre gli argomenti delle funzioni pubbliche e faccio eccezioni quando qualcosa non va. (Per gli aiutanti privati uso le asserzioni).Messaggio di IllegalArgumentException automatizzato?
Ti piace questa:
if(a < 0 || a >= b)
throw new IllegalArgumentException("'a' must be greater or equal to 0 and
smaller than b ");
Ma mi infastidisce sempre di scrivere questi messaggi di errore. Il messaggio mi sembra ridondante, poiché il messaggio è solo la negazione dell'istruzione
a < 0 || a >= b
.
Accade spesso anche che io rinomini la variabile con refactoring (in eclissi) e che quindi il messaggio non rifletta le modifiche. O cambio le condizioni e dimentico di cambiare i messaggi.
Sarebbe bello, se potevo scrivere qualcosa di simile:
assertArgument(a >= 0 && a < b);
Questo dovrebbe sollevare un IllegalArgumentException con un messaggio come
"violated argument assertion: a >= 0 && a < b."
In C si potrebbe scrivere una macro (in realtà in C asserire è solo una macro). C'è un modo semplice per fare qualcosa di simile in java?
Grazie!
È possibile generare codice Java durante la compilazione ... ma il dolore non ne vale la pena. Il tuo problema non è mortale - finché puoi id una linea, sarai ok. Puoi anche scrivere script Python per passare attraverso il codice e verificare la presenza di incoerenze. –
Che ne dici di creare una funzione di aiuto 'checkParam (param, paramName)'? Quindi, anche dopo aver rinominato le variabili, puoi ancora trovare un rapido script Python per cercare tutte le istanze di checkParam e assicurarti che siano kosher. Forse qualcun altro può espandere questa idea. –
Si potrebbe anche usare il riflesso in modalità Debug. –