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