ClassCastExceptionについて

おとといの日記で「例外は発生することが予期できないエラーにのみ使う」と書いたけれども、そうするとJAVAのClassCastExceptionはどうなるんだと考えた。

ダウンキャストを行う以上、ダウンキャストに失敗することは当然「予期できる」はずでは・・・・?JAVAのダウンキャストはC++のdynamic_castとは違ってダウンキャストに失敗した場合は必ず例外を投げる。すると上の原則から外れてしまう。

ちなみに「Javaの鉄則―エキスパートのプログラミングテクニック」ではこういった場合には思い切ってinstanceofを使って逃げても良いと書いている。そもそもダウンキャストやinstanceofに頼らないといけない設計を回避するのが一番なんだろうけど現実はそう甘くないわけで。

綺麗なOOPってやっぱり絵に描いた餅なのかなあ