某氏によると「instanceofでオブジェクトの型を調べるのは危険ではないか?意図していないサブクラスがinstanceofで引っかかるから」ということらしい。

instanceof を使うと、その型を所有するクラスの子クラスのインスタンスも適合する。子クラスは親クラスとしても振る舞えるはずなので問題はない。ただし子クラスが親クラスの意図しない振る舞いをしてしまうものであった場合は危険なのではないか?

Class#getName で取得したクラス名を調べる方法を使うと、その型を所有するクラスのインスタンスのみが適合する。そのクラスの子クラスがあったとしてもクラス名が違うことから適合しないため、子クラスが意図しない振る舞いをしても問題はない。ただし、その子クラスのインスタンスも適合させるべきだったら危険ではないか?

tags: Java zurazure

Posted by NI-Lab. (@nilab)