java泛型的概念、作用和使用场景介绍
admin
2023-02-13 19:00:06
0

今天小编给大家分享的是java泛型的概念、作用和使用场景的详细介绍,相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。

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

首先看一个例子:

Pairkv.java
package com.paint.test;

public class Pairkv {
U first;
V second;
public Pairkv(U first,V second){
this.first = first;
this.second = second;
}

public U getFirst() {
    return first;
}

public V getSecond() {
    return second;
}

@Override
public String toString() {
    return super.toString()+ "\n this first:"+first+",this second:"+second;
}

}

程序入口类:

import javax.swing.;
import java.util.
;
import com.paint.test.*;

public class HelloWorld {
public static void main(String[] args)  {
Pairkv pairkv = new Pairkv<>(1,"泛型测试");
System.out.println(pairkv.toString());
}
}

那么注意,泛型不是必须的编程方式,泛型是为了让我们编程逻辑更清晰、方便解耦、不易出错的一种辅助的数据结构方式,编译器会将泛型代码转为普通非泛型代码。那么下面以集合(接口)、方法、类三种常见的使用场景来讲解泛型的使用:

场景1、泛型在集合中的作用

  • JDK1.5以后引入泛型 ArrayList
    泛型的作用:限定对象里面能够操作的数据类型。这样更安全,并且当从集合获取一个对象时,编译器也可知道该对象的类型,不需要对对象进行强制类型转换
       ArrayList<String>  arrayList01 = new ArrayList();
       arrayList01.add("aaaa");
       arrayList01.add("bbbb");
      // arrayList01.add(1);//编译时就报错,只能添加String类型数据
       String  a3 = arrayList01.get(0);
       String  a4 = arrayList01.get(1);
       System.out.println(a3);
       System.out.println(a4);//不需要再进行类型转换

注意:
①泛型不接受 8 种基本数据类型,必须申明引用类型
// Map map = new HashMap(); 错误,需使用对应的包装类。
// Map map = new HashMap(); 正确的定义方式

②限定对象里面能够操作的数据类型
List list ...   表示list变量指向的集合内只能存储Integer类型的数据
Map 表示map中的key只能是String,value只能是Goods类型。
 ③Cat继承Animal,但List 和 List 没有有继承关系
ArrayList  arrayList0001 = new ArrayList();//编译报错
后面<>可以不写,前后类型要一致
 ④数据的基本术语
ArrayList整个称为泛型类型
ArrayList中的E称为类型参数变量
ArrayList中的Integer称为实际类型参数
整个ArrayList称为参数化类型(ParameterizedType)
ArrayList为原始类型

场景2、泛型方法

先来说泛型方法的定义形式:
public <类型参数名称> 类型参数 func(),类型参数为T放在了返回值前面(做了一个标记说明后面类型T就是这里提前预声明的),如下:

              public static  <T> T func(T t);

代码案例:

import com.paint.test.*;
public class test(){
public static void main(){

    Integer[] intarr = new Integer[]{1,3,4,9,11};
    String[] strings = new String[]{"aasdf","erewrre","ppppp"};

    GenericFunc.change(intarr,1,3);
    GenericFunc.change(strings,0,2);
    System.out.println(Arrays.toString(intarr));
    System.out.println(Arrays.toString(strings));
      }

}

GenericFunc类中我们将泛型和非泛型方法放在一起做类比,泛型优化了数据类型方法,否则我们将多次定义不同类型的执行方法change,如下:

package com.paint.test;

public class GenericFunc {

public static <T> void change(T[] arrStr, int start, int end){
    T temp = arrStr[start];
    arrStr[start] = arrStr[end];
    arrStr[end] = temp;
}

public static void changeStr(String[] arrStr,int start,int end){
    String temp = arrStr[start];
    arrStr[start] = arrStr[end];
    arrStr[end] = temp;
}

public static void changeInt(Integer[] arrStr,int start,int end){
    System.out.println("传参数组变量"+arrStr.toString());
    Integer temp = arrStr[start];
    arrStr[start] = arrStr[end];
    arrStr[end] = temp;
}

}

注意:
①这里的T可以用任意的大写字母表示,通常T代表任何类,E代表element或exception,k代表键名key,value代表值value
②这里的放在了返回值前,作为一个定义好的类型从而在后面的代码块中作为数据类型使用
③泛型中可同时有多个类型如:public static V getValue(K key) { return map.get(key);}

场景3、泛型类

泛型类最常见的作用是作为容器类,容纳并管理多项数据类。当一个类中多处需要使用到同一个泛型(如类中包含集合泛型、方法泛型),可以把泛型定义在类上。静态方法不能使用类定义的泛形,而应该单独定义泛形。
定义形式:

public class classname{

}

注意:
静态方法不能使用类定义的泛形,而应该单独定义泛形。静态方法用类调用 ,类调用静态方法时类还没有实例化从而无法调用后面的泛型,所以静态方法中有泛型,必须要自己定义方法泛型。泛型方法始终以自己定义的类型参数为准。

以上就是java泛型的概念、作用和使用场景的详细介绍了,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注行业资讯!

相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...