Java泛型 T与T的使用方法详解
泛型(Generictype或者generics)是对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。
在集合框架(Collectionframework)中泛型的身影随处可见。例如,Map类允许向一个Map类型的实例添加任意类的对象,即使最常见的情况在给定映射(map)中保存一个string键值对。
命名类型参数
对于常见的泛型模式,推荐的泛型类型变量:
- E:元素(Element),多用于java集合框架
- K:关键字(Key)
- N:数字(Number)
- T:类型(Type)
- V:值(Value)
大家都知道,Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦除,正确理解泛型概念的首要前提是理解类型擦除。Java泛型是如何工作的?什么是类型擦除?答:泛型是通过类型擦除来实现的,编译器在编译时擦除了所有泛型类型相关的信息,所以在运行时不存在任何泛型类型相关的信息,譬如List
泛型擦除具体来说就是在编译成字节码时首先进行类型检查,然后进行类型擦除(即所有类型参数都用他们的限定类型替换,包括类、变量和方法),最后如果类型擦除和多态性发生冲突,就在子类中使用桥接方法解决;如果调用泛型方法的返回类型被擦除,则在调用该方法时插入强制类型转换。在类型擦除中,编译器确保不会创建额外的类,并且没有运行时开销。
类型擦除原则
- 用通用类型的类型参数替换其绑定的有界类型参数;
- 如果使用无界类型参数,则使用Object替换类型参数;
- 插入类型转换以实现类型安全;
- 生成桥接方法以在扩展通用类型中保持多态。
这个
importorg.springframework.util.CollectionUtils; importjava.util.ArrayList; importjava.util.List; publicclassDemo{ publicstaticvoidmain(String[]args){ Demodemo=newDemo(); //获取string类型 Listarray=newArrayList (); array.add("test"); array.add("doub"); Stringstr=demo.getListFisrt(array); System.out.println(str); //获取Integer类型 List nums=newArrayList (); nums.add(31); nums.add(32); Integernum=demo.getListFisrt(nums); System.out.println(num); } /** *这个 T可以传入任何类型的List *关于参数T *第一个表示是泛型 *第二个表示返回的是T类型的数据 *第三个限制参数类型为T * *@paramdata *@return */ private TgetListFisrt(List data){ if(CollectionUtils.isEmpty(data)){ returnnull; } returndata.get(0); } }
T的用法
单独的T表示限制参数的类型。这种用法一般多用于共同操作一个类对象,然后获取里面的集合信息。
importjava.util.ArrayList; importjava.util.List; publicclassDemo2{ publicstaticvoidmain(String[]args){ //限制T为String类型 Demo2 demo=newDemo2 (); List array=newArrayList (); array.add("Tom"); array.add("河南"); Stringstr=demo.getListFisrt(array); System.out.println(str); //获取Integer类型 Demo2 demo2=newDemo2 (); List nums=newArrayList (); nums.add(12); nums.add(13); Integernum=demo2.getListFisrt(nums); System.out.println(num); } /** *这个只能传递T类型的数据 *返回值就是Demo 实例化传递的对象类型 * *@paramdata *@return */ privateTgetListFisrt(List data){ if(data==null||data.size()==0){ returnnull; } returndata.get(0); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。