Domanda

Controllo sempre gli argomenti delle funzioni pubbliche e lancio delle eccezioni quando qualcosa è sbagliato.(Per gli aiutanti privati che utilizzo asserzioni).

In questo modo:

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 della dichiarazione

a < 0 || a >= b
.

.

Si verifica spesso che rinominando la variabile con il refactoring (in Eclipse) e quindi il messaggio non riflette le modifiche.O modifico le condizioni e dimentica di cambiare i messaggi.

Sarebbe bello, se potessi scrivere qualcosa del genere:

assertArgument(a >= 0 && a < b);
.

Questo dovrebbe aumentare un illegalArgumentException con un messaggio come

"violated argument assertion: a >= 0 && a < b."
.

In C Potresti scrivere una macro (in realtà in C Assert è solo una macro). C'è un modo semplice per fare qualcosa del genere in Java?

Grazie!

È stato utile?

Soluzione

Nella lingua C non è possibile utilizzare le macro per farlo, ma in CPP (il preprocessore C) è possibile :-) Se vuoi davvero farlo non c'è nulla che non ti limiti da eseguire CPP sulla tua fonte Java prima di farloviene compilato.Ciò ti consente di utilizzare Macro Style CPP (potrebbe essere necessario spogliare le linee a partire da #line dall'uscita CP.)

Per riprodurre gli Conditional nell'eccezione è IMHO, compresi troppi dettagli di implementazione.Se il tuo messaggio di eccezione descrive la violazione nel contratto in termini di contratto (ad esempio "Nessun oggetto genitore dato", "Importo non può essere negativo") Non è necessario modificarlo ogni volta che la condizione cambia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top