Servletをやっていて、つい
HttpSession session = request.getSession();
boolean hasError = (Boolean)session.getAttribute("hasError");
というコードを書いてしまった。結果、これはNullPointerExceptionを投げてきた。
getAttribute()
は戻り値がObject型なので、ラッパークラス(ここではBoolean)でキャストする必要がある。
ところが、最初にgetAttribute()
を呼び出した時、戻り値はnullになるので、Boolean型のnullをアンボクシングしてboolean型に代入しようとした結果、NullPointerExceptionになる、という仕組みなのだった。
アンボクシングが起きる際、nullに気をつけるべきだったが、ちょっとこれは個人的に想定外だったので、一応メモをしておく。