Ho cercato molto di questi frammenti, cercandoli null
valori e stringhe vuote.
Uso il modello "test argomento" come primo codice nei miei metodi per controllare gli argomenti ricevuti.
testNullArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
È possibile che si desideri modificare il messaggio di eccezione per adattarlo allo standard dell'azienda o del progetto. Tuttavia, raccomando di avere qualche messaggio che includa il nome dell'argomento offensivo. Altrimenti il chiamante del tuo metodo dovrà cercare nel codice per capire cosa è andato storto. (UNNullPointerException
senza messaggio produce un'eccezione con il messaggio abbastanza nullo "null").
testNullOrEmptyStringArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
throw new IllegalArgumentException(
"Illegal argument. The argument cannot be an empty string: ${varName}");
}
Puoi anche riutilizzare il modello di controllo null dall'alto e implementare questo frammento per verificare solo le stringhe vuote. Quindi useresti quei due template per produrre il codice sopra.
Il modello precedente, tuttavia, ha il problema che se l'argomento in è final dovrai modificare un po 'il codice prodotto (il ${varName} = ${varName}.trim()
fallirà).
Se usi molti argomenti finali e vuoi controllare le stringhe vuote ma non devi tagliarle come parte del tuo codice, puoi invece procedere con questo:
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
if (${varName}.trim().isEmpty()) {
throw new IllegalArgumentException(
"Illegal argument. The argument cannot be an empty string: ${varName}");
}
testNullFieldState
Ho anche creato alcuni frammenti per controllare le variabili che non vengono inviate come argomenti (la grande differenza è il tipo di eccezione, ora IllegalStateException
invece un ).
if (${varName} == null) {
throw new IllegalStateException(
"Illegal state. The variable or class field cannot be null: ${varName}");
}
testNullOrEmptyStringFieldState
if (${varName} == null) {
throw new IllegalStateException(
"Illegal state. The variable or class field cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
throw new IllegalStateException(
"Illegal state. The variable or class field " +
"cannot be an empty string: ${varName}");
}
testArgument
Questo è un modello generale per testare una variabile. Mi ci sono voluti alcuni anni per imparare davvero ad apprezzare questo, ora lo uso molto (in combinazione con i modelli sopra ovviamente!)
if (!(${varName} ${testExpression})) {
throw new IllegalArgumentException(
"Illegal argument. The argument ${varName} (" + ${varName} + ") " +
"did not pass the test: ${varName} ${testExpression}");
}
Immettere un nome di variabile o una condizione che restituisce un valore, seguito da un operando ("==", "<", ">" ecc.) E un altro valore o variabile e se il test ha esito negativo il codice risultante genererà un IllegalArgumentException.
Il motivo della clausola if leggermente complicata, con l'intera espressione racchiusa in un "! ()" È di rendere possibile riutilizzare la condizione di test nel messaggio di eccezione.
Forse confonderà un collega, ma solo se devono guardare il codice, cosa che potrebbe non essere necessario se si lanciano questo tipo di eccezioni ...
Ecco un esempio con le matrici:
public void copy(String[] from, String[] to) {
if (!(from.length == to.length)) {
throw new IllegalArgumentException(
"Illegal argument. The argument from.length (" +
from.length + ") " +
"did not pass the test: from.length == to.length");
}
}
Ottieni questo risultato richiamando il modello, digitando "from.length" [TAB] "== to.length".
Il risultato è molto più divertente di un "ArrayIndexOutOfBoundsException" o simile e può effettivamente dare ai tuoi utenti la possibilità di capire il problema.
Godere!