泛型

泛型(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。如果指定了类型参数的上界,则使用这个上界,把代码中的类型参数都替换成具体的类。

 

posted @ 2022-10-27 22:19  doremi429  阅读(36)  评论(0编辑  收藏  举报