泛型(Generics)是JDK5中引入的特性。使用泛型参数,可以增加代码的可读性以及稳定性
编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型。比如
ArrayList<Person> persons = new ArrayList<Person>() 这行代码指明了该ArrayList对象只能传入
Person对象,如果传入其它类型的对象就会报错
ArrayList<E> extends AbstractList<E>
并且,原生List返回类型时Object,需要手动转换类型才能使用,使用泛型后编译器自动转换
泛型使用方式:泛型类、泛型接口、泛型方法
泛型类:
实例化泛型类:
泛型接口:
实现泛型接口,不指定类型
实现泛型接口,指定类型:
泛型方法:
注意: public static < E > void printArray( E[] inputArray )
一般被称为静态泛型方法;在 java 中泛型只是一个占位符,必须在传递类型后才能使用。类在实例化时才能真正的传递类型参数,由于静态方法的加载先于类的实例化,也就是说类中的泛型还没有传递真正的类型参数,静态的方法的加载就已经完成了,所以静态泛型方法是没有办法使用类上声明的泛型的。只能使用自己声明的 <E>
项目中哪里用到了泛型?
泛型类型擦除:
java中的泛型基本上都是在编译器这个层次来实现的。生成的java字节代码中是不包含泛型中的类型信息。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。
如:在代码中定义的List<Object> 和List<String>等类型,编译后都会变成List,JVM看到的知识List,
而由泛型附加的类型信息对JVM来说是不可见的。类型擦除过程:首先是找到用来替换类型参数的具体类,这个具体类一般是Object。如果指定了类型参数的上界,则使用这个上界,把代码中的类型参数都替换成具体的类。
标签:ArrayList,List,类型,编译器,参数,泛型 From: https://www.cnblogs.com/doremi429/p/16834240.html