今天小編給大家分享的是java泛型的概念、作用和使用場(chǎng)景的詳細(xì)介紹,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說(shuō),一起往下看吧。
創(chuàng)新互聯(lián)技術(shù)團(tuán)隊(duì)10余年來(lái)致力于為客戶提供做網(wǎng)站、網(wǎng)站設(shè)計(jì)、成都品牌網(wǎng)站建設(shè)、成都營(yíng)銷網(wǎng)站建設(shè)、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了上千網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。
泛型,字面含義廣泛的類型,可以用于類、接口、方法使得同一套代碼可以用于多種數(shù)據(jù)類型。這樣不僅可以復(fù)用代碼,降低耦合,而且可以提高代碼的可讀性和安全性。
首先看一個(gè)例子:
Pairkv.java
package com.paint.test;public class Pairkv<U,V> {
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<Integer,String> pairkv = new Pairkv<>(1,"泛型測(cè)試");
System.out.println(pairkv.toString());
}
}
那么注意,泛型不是必須的編程方式,泛型是為了讓我們編程邏輯更清晰、方便解耦、不易出錯(cuò)的一種輔助的數(shù)據(jù)結(jié)構(gòu)方式,編譯器會(huì)將泛型代碼轉(zhuǎn)為普通非泛型代碼。那么下面以集合(接口)、方法、類三種常見的使用場(chǎng)景來(lái)講解泛型的使用:
ArrayList<String> arrayList01 = new ArrayList(); arrayList01.add("aaaa"); arrayList01.add("bbbb"); // arrayList01.add(1);//編譯時(shí)就報(bào)錯(cuò),只能添加String類型數(shù)據(jù) String a3 = arrayList01.get(0); String a4 = arrayList01.get(1); System.out.println(a3); System.out.println(a4);//不需要再進(jìn)行類型轉(zhuǎn)換
注意:
①泛型不接受 8 種基本數(shù)據(jù)類型,必須申明引用類型
// Map<String,int> map = new HashMap(); 錯(cuò)誤,需使用對(duì)應(yīng)的包裝類。
// Map<String,Integer> map = new HashMap(); 正確的定義方式
②限定對(duì)象里面能夠操作的數(shù)據(jù)類型
List<Integer> list ... 表示list變量指向的集合內(nèi)只能存儲(chǔ)Integer類型的數(shù)據(jù)
Map<String, Goods> 表示map中的key只能是String,value只能是Goods類型。
③Cat繼承Animal,但List<Cat> 和 List<Animal> 沒有有繼承關(guān)系
ArrayList<Animal> arrayList0001 = new ArrayList<Cat>();//編譯報(bào)錯(cuò)
后面<>可以不寫,前后類型要一致
④數(shù)據(jù)的基本術(shù)語(yǔ)
ArrayList<E>整個(gè)稱為泛型類型
ArrayList<E>中的E稱為類型參數(shù)變量
ArrayList<Integer>中的Integer稱為實(shí)際類型參數(shù)
整個(gè)ArrayList<Integer>稱為參數(shù)化類型(ParameterizedType)
ArrayList為原始類型
先來(lái)說(shuō)泛型方法的定義形式:
public <類型參數(shù)名稱> 類型參數(shù) func(),類型參數(shù)為T放在了返回值前面(做了一個(gè)標(biāo)記說(shuō)明后面類型T就是這里提前預(yù)聲明的),如下:
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類中我們將泛型和非泛型方法放在一起做類比,泛型優(yōu)化了數(shù)據(jù)類型方法,否則我們將多次定義不同類型的執(zhí)行方法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("傳參數(shù)組變量"+arrStr.toString()); Integer temp = arrStr[start]; arrStr[start] = arrStr[end]; arrStr[end] = temp; }
}
注意:
①這里的T可以用任意的大寫字母表示,通常T代表任何類,E代表element或exception,k代表鍵名key,value代表值value
②這里的<T>放在了返回值前,作為一個(gè)定義好的類型從而在后面的代碼塊中作為數(shù)據(jù)類型使用
③泛型中可同時(shí)有多個(gè)類型如:public static <K,V> V getValue(K key) { return map.get(key);}
泛型類最常見的作用是作為容器類,容納并管理多項(xiàng)數(shù)據(jù)類。當(dāng)一個(gè)類中多處需要使用到同一個(gè)泛型(如類中包含集合泛型、方法泛型),可以把泛型定義在類上。靜態(tài)方法不能使用類定義的泛形,而應(yīng)該單獨(dú)定義泛形。
定義形式:
public class classname<T>{
}
注意:
靜態(tài)方法不能使用類定義的泛形,而應(yīng)該單獨(dú)定義泛形。靜態(tài)方法用類調(diào)用 ,類調(diào)用靜態(tài)方法時(shí)類還沒有實(shí)例化從而無(wú)法調(diào)用后面的泛型,所以靜態(tài)方法中有泛型,必須要自己定義方法泛型。泛型方法始終以自己定義的類型參數(shù)為準(zhǔn)。
以上就是java泛型的概念、作用和使用場(chǎng)景的詳細(xì)介紹了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊!
分享文章:java泛型的概念、作用和使用場(chǎng)景介紹
文章分享:http://m.newbst.com/article28/gcedjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、企業(yè)建站、、定制開發(fā)、動(dòng)態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)