泛型,字面含义广泛的类型,可以用于类,接口,方法使得同一套代码可以用于多种数据类型。这样不仅可以复用代码,降低耦合,而且可以提高代码的可读性和安全性。
首先看一个例子:
Pairkv。java包com.paint.test
,公共类Pairkv{
U;
V第二;
公共Pairkv (U, V秒){
。第一=,
。第二个=第二;
}<代码>公共U列表(){ 返回第一个; } 公共V getSecond () { 返回第二; } @Override 公共字符串toString () { 返回super.toString () +“\ n第一:“+第一+“,第二:”+第二; }代码>} 引用>
程序入口类:
进口javax.swing。,
进口java.util。,
进口com.paint.test。*;公共类HelloWorld {
引用>
公共静态void main (String [] args) {
Pairkv<整数,String>pairkv=new Pairkv<祝辞(1,“泛型测试“);
System.out.println (pairkv.toString ());
}
}那么注意,泛型不是必须的编程方式,泛型是为了让我们编程逻辑更清晰,方便解耦,不易出错的一种辅助的数据结构方式,编译器会将泛型代码转为普通非泛型代码。那么下面以集合(接口),方法,类三种常见的使用场景来讲解泛型的使用:
场景1,泛型在集合中的作用
<李> <>强JDK1.5以后引入泛型ArrayList
强>
泛型的作用:限定对象里面能够操作的数据类型。这样更安全,并且当从集合获取一个对象时,编译器也可知道该对象的类型,不需要对对象进行强制类型转换<代码> ArrayList&肝移植;String& gt;arrayList01=new ArrayList (); arrayList01.add (“aaaa”); arrayList01.add (“bbbb”);//arrayList01.add(1);//编译时就报错,只能添加字符串类型数据 字符串a3=arrayList01.get (0); 字符串a4=arrayList01.get (1); System.out.println (a3); System.out.println (a4);//不需要再进行类型转换代码>李引用> ><强> 注意: 强>
<强> ①泛型不接受8种基本数据类型,必须申明引用类型 强>
//Map<字符串,int>地图=new HashMap ();错误,需使用对应的包装类。
//Map<字符串,Integer>地图=new HashMap ();正确的定义方式<强> ②限定对象里面能够操作的数据类型 强>
List列表…表示列表变量指向的集合内只能存储整数类型的数据
Map<字符串,Goods>表示图中的关键只能是字符串,价值只能是货物类型。
<强> ③猫继承动物,但List和List 强>没有有继承关系
ArrayListarrayList0001=new ArrayList ();//编译报错
后面& lt;在可以不写,前后类型要一致
<强> ④数据的基本术语 强>
ArrayList整个称为泛型类型
ArrayList中的E称为类型参数变量
ArrayList中称的整数为实际类型参数
整个ArrayList称为参数化类型(ParameterizedType)
ArrayList为原始类型场景2,泛型方法
先来说泛型方法的定义形式:
公共& lt;类型参数名称比;类型参数func()类型参数为T放在了返回值前面(做了一个标记说明后面类型T就是这里提前预声明的),如下:<代码>公共静态,lt; T& gt;T func (T T); 代码>引用>代码案例:
进口com.paint.test。*;
公共类测试(){
公共静态孔隙主要(){<代码> Integer [] intarr=new Integer [] {1、3、4、9、11}; 字符串String []=new String [] {“aasdf”、“erewrre”,“ppppp”}; GenericFunc.change (intarr, 1, 3); GenericFunc.change(字符串、0、2); System.out.println (Arrays.toString (intarr)); System.out.println (Arrays.toString(字符串)); }代码>} 引用>
GenericFunc类中我们将泛型和非泛型方法放在一起做类比,泛型优化了数据类型方法,否则我们将多次定义不同类型的执行方法的变化,如下:
包com.paint.test; 公共类GenericFunc {
<代码>公共静态,lt; T& gt;空变化(T [] arrStr, int, int) { T temp=arrStr[开始]; arrStr[开始]=arrStr[结束]; arrStr[结束]=temp; } 公共静态孔隙changeStr (String [] arrStr, int, int) { 字符串temp=arrStr[开始]; arrStr[开始]=arrStr[结束]; arrStr[结束]=temp; } 公共静态孔隙changeInt(整数[]arrStr, int, int) { System.out.println(“传参数组变量”+ arrStr.toString ()); 整数temp=arrStr[开始]; arrStr[开始]=arrStr[结束]; arrStr[结束]=temp; }Java学习升阶-01 -一篇看懂Java泛型