泛型?
泛型是一种参数化的变量,Java的泛型是一种伪泛型,c语言的模板函数和c#的泛型才是真的泛型,其中c语言的模板函数是通过替换实现的。Java在编译的时候会进行类型的擦除,但是会进行singature标记,通过singature标记后是可以通过反射获取到真实泛型的。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。
JVM并不知道泛型的存在,因为泛型在编译阶段就已经被处理成普通的类和方法;
处理机制是通过类型擦除,擦除规则:
若泛型类型没有指定具体类型,用Object作为原始类型;
若有限定类型< T exnteds XClass >,使用XClass作为原始类型;
若有多个限定< T exnteds XClass1 & XClass2 >,使用第一个边界类型XClass1作为原始类型;
1.泛型种类:三类
1.1 泛型类
public class Generic<T> {
public T t;
}
1.2 泛型接口
public interface IInterface<T> {
void fun();
}
1.3 泛型方法 泛型方法的标志是有
public <T> void genericMethod(T t) {
}
2.泛型擦除
泛型在通过class编译后会被进行强转为原始类型,