Java如何创建泛型集合?

在此示例中,您将学习如何创建泛型集合。使用泛型集合,您可以定义存储在集合中的对象的类型。在大多数情况下,使用集合时,您会在其中存储相同类型的对象。因此,如果您知道要存储在集合中的内容以及在尝试从其中读取某些数据时所期望的内容而又不必担心在代码中创建运行时错误(因为在集合中放置了错误的对象),则工作会更安全。

使用从JDK 5.0开始引入的泛型类型机制,您可以引用给定类型声明集合。您可以在变量声明后和变量实例化后的尖括号内定义类型。在JDK 7.0中,您可以使用菱形运算符简化此过程。例如,您要创建一个存储Customer对象的集合,声明和实例化代码将类似于下面的代码片段。

List<Customer> customers = new ArrayList<Customer>();

在JDK 7.0中,您可以编写它而无需在实例化部分上重复类型。

List<Customer> customers = new ArrayList<>();

以这种方式创建集合对象将告诉编译器您只希望添加类型为Customer的对象作为集合的内容。这意味着add方法将以Customer为参数,而get方法将返回Customer对象。如果您尝试添加例如Product对象或Seller对象,则编译器将给您一个编译时错误。

让我们看一下此示例的完整代码段:

package org.nhooo.example.generics;

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

public class GenericCollection {
    public static void main(String[] args) {
        List<Customer> customers = new ArrayList<>();
        customers.add(new Customer());
        customers.add(new Customer());

        //customers.add(new Product()); // 编译时错误!

        // 不需要强制转换运算符。
        Customer customer = customers.get(0);

        for (Customer cust : customers) {
            System.out.println(cust);
        }
    }
}

从上面的代码中可以看到的另一件事是,从集合中获取数据时,您不再需要使用强制转换运算符。在5.0版之前的JDK上,通常必须使用instanceof运算符来查看集合返回的对象类型,然后必须将其强制转换。使用泛型时,您无需再执行此操作。您还可以查看遍历集合对象内容的代码如何变得更简单易读。