Java 中的泛型<E>

Rupam Yadav 2023年10月12日
Java 中的泛型<E>

Java 5 中新增了泛型以改進抽象,並提供一種使用方法、介面或具有不同物件或資料型別的單個類的方法。

有一個與 Generics 相關的通用命名約定,例如 T 代表 Type,V 用於 Value。我們看一下 E,這是 Generics 中使用的另一個型別引數名稱,在本文中通常代表 Element。

在 Java 中使用 Generics <E> 建立一個新列表

理解 Generics 的最好方法是使用集合,因為沒有 Generics,像列表這樣的集合過去需要大量的程式碼來編寫。儘管如此,在引入 Generics 之後,我們仍然可以用很少的程式碼建立 List 或任何其他集合。

通用名稱 <E> 代表 Element,通常用於 Java 集合框架中。在下面的示例中,我們建立了一個名為 newListWithElements() 的靜態方法,該方法接受一個泛型型別 E 引數和變數引數運算子 ...,稱為 listElements

newListWithElements() 方法返回一個 <E> 型別的 List,它是一個泛型型別引數。我們還在返回型別之前和 static 或任何使用泛型方法的訪問修飾符之後使用型別引數。

在函式內部,我們建立了一個 int 變數 listElementsSize 並使用 listElements 引數的長度對其進行初始化。如果它是 null,我們將其初始化為零。

然後我們建立一個 ArrayList 建構函式並傳遞 listElementsSize,它是 List 的大小,它返回一個 <E> 型別的 List

現在我們收集所有的 listElements 元素並使用 Collections.addAll() 建立一個新列表,將所有元素新增到新列表 listOfElements 中。我們有一個從該方法返回的新列表。

main() 函式中,我們使用 StringIntegerBoolean 等型別呼叫 newListWithElement() 三次。Generics 可以使用單個方法建立多個物件型別的列表。

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