Java学习升阶-01 -一篇看懂Java泛型

  

泛型,字面含义广泛的类型,可以用于类,接口,方法使得同一套代码可以用于多种数据类型。这样不仅可以复用代码,降低耦合,而且可以提高代码的可读性和安全性。

  

首先看一个例子:

  
  

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泛型