上級者向け:
※以下の内容は、上級コースが修了済みのユーザーが対象となります。
※以下の内容は、上級コースが修了済みのユーザーが対象となります。
Javaを選択しているとデフォルトのコードに<E>と書かれているものがあります。これはジェネリクスの型パラメータを表しています。
ジェネリクスとは、クラスを定義するときには汎用性を持たせておき、実行時にStringやIntegerなどの型を決定することができる仕組みです。ダイヤモンド演算子<>の中にアルファベット大文字を入れた型パラメータを使うことでジェネリクス(総称型)として利用することができます。
アルファベットは何でもいいのですが、型パラメーターとしてよく使われるのは、T(Type)、E(Element)、K(Key)、V(Value)などがあります。
連結リストを例として見てみよう
連結リストの問題ではSinglyLinkedListNode<E>が定義されています。これは「SinglyLinkedListNodeクラスを定義した時には指定されていないけれど、何かの型が1つ入ります」という意味です。実際にインスタンスを生成してクラスを利用するときには、<Integer>や<String>などを指定します。
例えば、Integer型の要素が入るSinglyLinkedListNodeクラスのインスタンスを作成したいときは、
SinglyLinkedListNode<Integer> node = new SinglyLinkedListNode<Integer>(data);
ように書きます。型推論でコンパイラが型を予測できる時には右辺の<Integer>を省略しダイヤモンド演算子<>のみにできる場合があります。
また、ジェネリクスで定義したクラスをメソッドの戻り値として利用するときにも特定の型を指定して記述します。ジェネリクスについて詳しくはOOPコースで学習します。