泛型应用于类型检查(例如避免ClassCastException),它可以省去类型转换的步骤,因为编译器知道集合中存储的是何种类型。泛型还可以应用于基于泛型的算法。

泛型定义于类或方法的定义中。在类中定义时,它们必须位于非限定类名之后。在方法中定义时,他们必须位于方法名之前。

泛型的命名规范与类一致,首字母须大写。定义的泛型由尖括号“<>”引用。在同一位置定义的多个泛型以英文逗号隔开,它们类似于方法的参数列表。

在指定泛型的真实类型时,这些泛型可以是同一个类型。如果泛型在类中定义,那么必须全部指定它们的真实类型。

// GenericTypeA是类的泛型,可以在它之后定义多个泛型
public class ClassName {
// GenericTypeB是方法的泛型,也可以在它之后定义多个泛型
public ReturnType methodName(...) {
...
}
...
}

泛型指代的类型可以与已定义的任何类的非限定名称一致。例如,你可以将一个将一个泛型的名称指定为String,但并不建议这样做,因为这极易引发混淆。

类的泛型可以作为任何方法的返回类型,它的对象可以作为任何方法或构造方法的参数,还可以出现在任何(静态)代码块中和(静态)方法的方法体中。(静态)方法的泛型的只允许作为当前(静态)方法的返回类型,它的对象只允许作为当前方法的参数,或者出现在当前方法的方法体中。

在类或方法中定义的泛型只继承Object类。当泛型未被指定真实类型时,它的对象只被允许调用Object类的方法。

除此之外,还可以在定义泛型时指定泛型继承的类型,或类继承的泛型。

泛型继承类型T

extends T>

类型T继承泛型

super T>