# 为什么要使用泛型？

> 原文： [https://docs.oracle.com/javase/tutorial/java/generics/why.html](https://docs.oracle.com/javase/tutorial/java/generics/why.html)

简而言之，泛型使 _ 类型 _（类和接口）在定义类，接口和方法时成为参数。与方法声明中使用的更熟悉的 _ 形式参数 _ 非常相似，类型参数提供了一种方法，您可以使用不同的输入重用相同的代码。不同之处在于形式参数的输入是值，而类型参数的输入是类型。

使用泛型的代码比非泛型代码有许多好处：

*   在编译时更强的类型检查。
    Java 编译器将强类型检查应用于通用代码，并在代码违反类型安全时发出错误。修复编译时错误比修复运行时错误更容易，这很难找到。

*   消除演员阵容。
    以下没有泛型的代码片段需要转换：

    ```
     List list = new ArrayList（）; list.add（ “你好”）; String s = （String） list.get（0）; 
    ```

    当重写使用泛型时，代码不需要转换：

    ```
    List&lt;String&gt; list = new ArrayList&lt;String&gt;();
    list.add("hello");
    String s = list.get(0);   // no cast

    ```

*   使程序员能够实现通用算法。
    通过使用泛型，程序员可以实现通用算法，这些算法可以处理不同类型的集合，可以自定义，并且类型安全且易于阅读。