JAVA泛型
泛型具有以下优点:
·编译时的强类型检查
·避免了类型转换
·泛型编程可以实现通用算法
泛型类型
泛型类型是被参数化的类或接口。
class name<T1, T2, …, Tn> { … }
在泛型出现之前,如果一个类想持有一个可以为任意类型的数据,只能使用 Object 做类型转换。
泛型接口
public interface Content<T> {
T text();
}
·实现接口的子类可以不明确声明泛型类型
泛型方法
泛型方法是引入其自己的类型参数的方法。泛型方法可以是普通方法、静态方法以及构造方法。
·是否拥有泛型方法,与其所在的类是否是泛型没有关系
·使用泛型方法的时候,通常不必指明类型参数,因为编译器会为我们找出具体的类型。这称为类型参数推断(type argument inference)。类型推断只对赋值操作有效,其他时候并不起作用。
泛型方法中也可以使用可变参数列表
类型擦除
Java 泛型是使用类型擦除来实现的,使用泛型时,任何具体的类型信息都被擦除了
··把泛型中的所有类型参数替换为 Object,如果指定类型边界,则使用类型边界来替换。因此,生成的字节码仅包含普通的类,接口和方法。
··擦除出现的类型声明,即去掉 <> 的内容。比如 T get() 方法声明就变成了 Object get() ;List
这是因为:使用泛型时,任何具体的类型信息都被擦除了。这意味着:ArrayList
泛型和继承
泛型不能用于显式地引用运行时类型的操作之中
正是由于泛型时基于类型擦除实现的,所以,泛型类型无法向上转型。
这是因为,泛型类并没有自己独有的 Class 类对象
类型边界
类型边界可以对泛型的类型参数设置限制条件