Java の Generics <E>

Rupam Yadav 2023年10月12日
Java の Generics <E>

Generics は、抽象化を改善し、メソッド、インターフェース、または異なるオブジェクトやデータ型で単一のクラスを使用する方法を提供するために Java5 で追加されました。

T はタイプを表し、V は値に使用されるなど、Generics に関連する一般的な命名規則があります。この記事では通常 Element を表す Generics で使用される別のタイプパラメータ名である E を見ていきます。

Java で Generics``<E> を使用して新しいリストを作成する

Generics を理解する最良の方法は、コレクションを使用することです。Generics がないと、リストのようなコレクションは、多くのコードを記述していたためです。それでも、Generics を導入した後は、コードをほとんど使用せずに List やその他のコレクションを作成できます。

一般名 <E> は Element の略で、Java コレクションフレームワークで一般的に使用されます。以下の例では、listElements と呼ばれる可変引数演算子 ... を持つジェネリック型 E パラメーターを受け取る newListWithElements() と呼ばれる静的メソッドを作成します。

newListWithElements() メソッドは、ジェネリック型パラメーターであるタイプ <E>リストを返します。また、戻り型の前と static の後に型パラメーターを使用するか、ジェネリックメソッドを使用してアクセス修飾子を使用します。

関数内で、int 変数 listElementsSize を作成し、listElements パラメーターの長さで初期化します。null の場合は、ゼロで初期化します。

次に、ArrayList コンストラクターを作成し、List のサイズである listElementsSize を渡します。これは、タイプ <E>List を返します。

次に、すべての listElements 要素を収集し、Collections.addAll() を使用して新しいリストを作成します。これにより、すべての要素が新しいリスト listOfElements に追加されます。メソッドから返す新しいリストがあります。

main() 関数では、StringIntegerBoolean などの型で newListWithElement() を 3 回呼び出します。Generics を使用すると、1つのメソッドで複数のオブジェクトタイプのリストを作成できます。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class JavaEGenerics {
  public static void main(String[] args) {
    List<String> newStringList = newListWithElements("element1", "element2", "element3");
    List<Integer> newIntList = newListWithElements(11, 12, 13);
    List<Boolean> newBooleanList = newListWithElements(true, false);

    System.out.println(newStringList);
    System.out.println(newIntList);
    System.out.println(newBooleanList);
  }

  static <E> List<E> newListWithElements(E... listElements) {
    int listElementsSize = 0;

    if (listElements != null)
      listElementsSize = listElements.length;

    List<E> listOfElements = new ArrayList<>(listElementsSize);

    if (listElements != null)
      Collections.addAll(listOfElements, listElements);

    return listOfElements;
  }
}

出力:

[element1, element2, element3]
[11, 12, 13]
[true, false]
著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java Generics