Výjimka NullPointerException (zkráceně NPE) je vyhozena runtimem javy ve chvíli, kdy se nad null hodnotou virtuální stroj pokusí vyvolat metodu, přistoupit k prvku nebo u pole k atributu length, případně když se pokusíme o obrat throw null. Dokumentace nabádá k využití této výjimky také v jiných případech špatného použití hodnoty null. Často ale vidím toto:
public xxx(String str) { if (str == null) { throw new NullPointerException("Cannot be null"); } }
V tomto případě je sice všechno v pořádku, ale sémantika NPE je poněkud odlišná, alespoň takhle to chápu já – obvykle vyjadřuje, že je něco opravdu špatně a v podstatě by k ní nemělo vůbec dojít. Jedná se o chybu programátora, když zákazník uvidí tuto výjimku někde v logu nebo přímo v programu (už jste ji také jistě viděli). Může to polekat, nejen uživatele, ale například jiného člena týmu, když výjimku spatří v záznamech JUnitu.
Proto v těchto případech, kdy se kontrolují vstupní parametry metod (velmi dobrý návyk, který je důležitý), bych vyhazoval jednu z výjimek IllegalArgumentException nebo v některých případech IllegalStateException. Jasně dokumentují jen svým názvem, kde se stala chyba a programátor v podstatě ihned začíná tušit, kde hledat.
K vyhození NPE musí být dobrý důvod. Vážný důvod.