简而言之,泛型在定义类,接口和方法时使类型(**types**(类和接口)成为参数。与方法声明中使用的很熟悉的形式参数(**formal parameters**非常相似,类型参数(**type parameters**)为您提供了一种使用不同输入时,重复使用相同代码的方法。区别在于形式参数的输入是值,而类型参数的输入是类型。
    与非泛型代码相比,使用泛型的代码具有许多优点:

    • 在编译时进行更强的类型检查。
      Java编译器将强类型检查应用于泛型代码,如果代码违反类型安全,则会发出错误。修复编译时错误比修复运行时错误容易,后者可能很难找到。
    • 消除强制转换。
      以下不带泛型的代码段需要强制转换:
    1. List list = new ArrayList();
    2. list.add("hello");
    3. String s = (String) list.get(0);

    当重写以使用泛型时,代码不需要强制转换:

    1. List<String> list = new ArrayList<String>();
    2. list.add("hello");
    3. String s = list.get(0); // no cast
    • 使程序员能够实现泛型算法。
      通过使用泛型,程序员可以实现对不同类型的集合进行工作,可以自定义类型安全且易于阅读的泛型算法。