List list = new ArrayList();と書く理由を解説します。
Javaの開発現場でよく見かける実装である
List list = new ArrayList();
としてインスタンスを取得する記述。
Javaエンジニアでこの記述を見たことがないという方は恐らくいないのではと思います。
どうしてこのような記述にしているのか?
ます結論として、以下を考えています。
Listはインタフェースなので
List list = new List();
の記述は不可能
Listインタフェースが持つメソッドで必要十分
ArrayListでインスタンスを取得するのは
ArrayListの使い方(単純にaddして取り出す)が多いから
以下、解説していきます。
答えというよりは考え、程度でご覧いただければ。
まず、Listはインタフェースなので
List list = new List();
という記述はできません。
このコードを書くと、インスタンスを取得できないためコンパイルエラーになります。
これに関しては絶対です。実装できないですから。
では
ArrayList list = new ArrayList();
という記述はどうか?
ArrayListはListインタフェースを実装したクラスであるため、
コンパイルエラーになりません。
そのまま実装を進めても特に問題も出ないでしょう。
では、なぜ、一般的には
List list = new ArrayList();
と記述するのか?
これは、ArrayListクラスでインスタンスを取得するが、
Listの機能で十分だよ、という記述でもあります。
例えば、addメソッドやとかgetメソッドといった、
Listインタフェースがベースとして持っているメソッドのみで事足りる場合の記述であり
そういったケースがかなり多いから、だと思います。
ArrayListが持っていてListにはないメソッドは、
たとえばclone()などがありますが、これを使ったことはありません(^_^;)
Listではダメで
どうしてもArrayListのメソッドを使わないといけない
あるいは使った方が実装が楽、という場合に限り
ArrayList list = new ArrayList();
とするのが、後々でメンテナンスしやすいと思います。
Listで十分な場合は
List list = new ArrayList();
として、Listの機能で必要十分ですよ、と明記してやるのがよいでしょう。
そうすると、何故ArrayListなのか?
List list = new LinkedList();
でも、基本的には問題ありません。
これは、List、ArrayListがともにJDK1.2からサポートされるようになったことと、
ArrayListの使い方の方が多い(LinkedListのように順番まで指定してaddするケースが少ない)ことが考えられます。
※ArrayListとLinkedListの違いについては
ArrayListとLinkedListの違いをご覧ください。
もしかしたら明確な答えはないのかもしれませんが
最初の結論の通り
Listはインタフェースなので
List list = new List();
の記述は不可能
Listインタフェースが持つメソッドで必要十分であるため
ArrayListでインスタンスを取得するのは
ArrayListの使い方(単純にaddして取り出す)が多いから
かな、と。
Mapでも同じことが言えるかと思います。
Javaトップへ
Map map = new HashMap();と書く理由