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