コレクション: インタフェースか具象クラスか
.NET Framework のリストを List<?> のまま扱うか、IList<?> として扱うか、という話。
.NET Framework なら、List のまま扱うのがいいと思う。実際、IList を実装したクラスで List 以外のものを使う機会はまずなかろう。わざわざ List を IList にキャストする意味はない。
そもそも、.NET Framework の IList インタフェースは機能が貧弱なのだ。一方、List 具象クラスは機能が豊富に揃っている (AddRange とか IndexOf とか TrueForAll とか)。機能が少ないので IList を実装したクラスを作ることは難しくないのだが、実際にそれをリストとして扱って仕事をするには IList の機能だけでは不足し、結局 List の機能に頼ることが多いと思う。だから、最初から最後までずっと List のまま通せばいい。.NET Framework のコレクションは、もともとインタフェースよりも具象クラスに重きを置いて設定してあるように思われる。
Java は逆だ。List インタフェースに十分な機能が揃っている。具象クラスに固有な機能はほとんど使うことはない。List インタフェースに機能が多いということは、それだけ具象クラスを作りにくいということでもあるが、Java では最初から具象クラスが複数用意されている。だから、Java ではリストを List インタフェースにキャストしてしまった方がよい。リストをインタフェースとして扱っておけば、場合に応じてリストの具象クラスを差し替えることができる。
| 固定リンク

コメント