Considera il metodo seguente:
public void operationOnList(List<String> list) {
list.add(1);
}
È ovvio che se l'elenco è nullo, questo metodo genererà una NullPointerException.
La mia domanda è: dovrei invece verificare esplicitamente null in questo caso?
public void operationOnList(List<String> list) {
if (list == null) throw new NullPointerException("some message")
list.add(1);
}
Su uno ho potuto aggiungere un messaggio qui, ma cosa succede se non sono davvero preoccupato per il messaggio? Mi aiuta a salvare una ramificazione non necessaria nel codice.
Quindi quale è preferibile e quale è più efficiente?
EDIT - non è un duplicato: nel mio caso, il metodo genererà una NullPointerException se si passa un valore Null in ENTRAMBI i casi precedenti. Non desidero o devo gestire l'eccezione e risolverlo nella funzione.
Quello che sto chiedendo è che dovrei controllare nullo esplicitamente (aggiungendo inutile se condizione o dovrei lasciare che l'NPE si verifichi quando viene usata quella variabile?
Modifica: -------------------------------------
Alcuni pensieri nel tempo:
- Se il metodo è esposto al client, ovvero fa parte di alcune API, è consigliabile controllare il prima possibile per verificare l'eccezione e lanciare un NPE con un buon messaggio. Il motivo è che se l'NPE viene lanciato dall'interno, viene stampata una brutta traccia di stack e l'utente potrebbe non sapere immediatamente quale metodo è il colpevole.