ArrayList を使う際、
List<E> arrayList = new ArrayList<>();
と List 型で宣言しすべきと一般的に言われています。
なぜそうなったのか気になったので、調べた結果をまとめました。
ArrayList を List 型で宣言すると...
- 「これは List インターフェースにある機能だけで充分で、ArrayList 等の独自の機能は必要としていない」ということを明示できる
- 後で型が変わる場合に変更範囲がより少なくなる
主に上記の2点のメリットを得ることが出来ます。
List 型のメソッドだけで事足りる場合の ArrayList の扱い
ArrayList を使う際、ただ要素を Add して取り出すだけといった用途の場合があるかと思います。
そういった際は List インターフェースのメソッドだけで事足りるのですが、もちろんインターフェースは実装しなければ使えないため、List インターフェースを継承した、ArrayList や LinkedList といったオブジェクトを代入する必要が生まれます。
それなら ArrayList じゃなくて LinkedList でも変わらないのか、と言われると実はそうではなく、場合によってどちらがより適して来るのかが変わってきます。
こちらで別にまとめましたので気になる方は御覧ください。
上記の理由から、ArrayList 固有のメソッドが必要な場合のみ、
ArrayList<> arrayList = new ArrayList<>();
と宣言することが好ましいとされています。
List 型で宣言しておけば、後で必要になった時に ArrayList 以外の型も入れられる
後で機能拡張を行う可能性がある場合、出来るだけ拡張性を高めておくことがより好ましい場合があります。
List 型で宣言された変数には、必要であれば、ArrayList だけでなく、LinkedList といった他の List インターフェースを継承したオブジェクトを代入出来るようになるため拡張性が広がります。