一文帶你認(rèn)識(shí)Java泛型基礎(chǔ)

Java泛型基礎(chǔ)

1. 認(rèn)識(shí)泛型

泛型是在JDK1.5之后增加的新功能.

泛型可以解決數(shù)據(jù)的安全性問題, 主要的原理是在類聲明的時(shí)候通過一個(gè)標(biāo)識(shí)表示類中某個(gè)屬性的類型或者是某個(gè)方法的返回值及參數(shù)類型.

格式:

訪問權(quán)限class類名稱<泛型, ...="">{

屬性

方法

}

對(duì)象的創(chuàng)建:

類名稱<具體類型> 對(duì)象名稱 = new 類名稱<具體類型>();

示例

/**

*?經(jīng)緯度

*

*?@author?dixin

*

*/

classPoint?{

privateT?x;

privateT?y;

publicTgetX(){

returnx;

}

publicvoidsetX(T?x){

this.x?=?x;

}

publicTgetY(){

returny;

}

publicvoidsetY(T?y){

this.y?=?y;

}

}

publicclassGenericDemo01{

publicstaticvoidmain(String[]?args){

Point

p1?=newPoint();

p1.setX("經(jīng)度為10");

p1.setY("緯度為100");

Point

p2?=newPoint();

p2.setX(10);

p2.setY(100);

System.out.println(p1.getX()?+",?"+?p1.getY());

System.out.println(p2.getX()?+",?"+?p2.getY());

}

}

//?執(zhí)行結(jié)果

經(jīng)度為10,?緯度為100

10,100

2. 構(gòu)造方法中使用泛型

classCon?{

privateT?value;

//?類定義中已經(jīng)定義泛型T,?方法中可以直接使用,?不用加<>

publicCon(T?value){

this.value?=?value;

}

publicTgetValue(){

returnvalue;

}

publicvoidsetValue(T?value){

this.value?=?value;

}

}

publicclassGenericDemo02{

publicstaticvoidmain(String[]?args){

Con

c?=newCon("構(gòu)造方法中使用泛型");

System.out.println(c.getValue());

}

}

3. 設(shè)置多個(gè)泛型

兩個(gè)泛型的例子:

classGen?{

privateK?key;

privateT?value;

publicKgetKey(){

returnkey;

}

publicvoidsetKey(K?key){

this.key?=?key;

}

publicTgetValue(){

returnvalue;

}

publicvoidsetValue(T?value){

this.value?=?value;

}

}

publicclassGenericDemo03{

publicstaticvoidmain(String[]?args){

Gen

gen?=newGen();

gen.setKey("key");

gen.setValue(10);

System.out.println(gen.getKey()?+",?"+?gen.getValue());

}

}

4. 通配符

類型不統(tǒng)一問題

classInfo?{

privateT?value;

publicvoidsetValue(T?value){

this.value?=?value;

}

publicTgetValue(){

returnvalue;

}

@Override

publicStringtoString()

{

returnthis.getValue().toString();

}

}

publicclassGenericDemo04{

publicstaticvoidmain(String[]?args){

Info

i?=newInfo();

i.setValue("類型不統(tǒng)一");

tell(i);//?編譯報(bào)錯(cuò)

//?The?method?tell(Info)?in?the?type?GenericDemo04?is?not?applicable?for?the?arguments

(Info)

}

publicstaticvoidtell(Info?i)?{

System.out.println(i);

}

}

原因:

泛型是不可變的, 對(duì)于任意兩個(gè)不同的類型Type1和Type2, List既不是List的子類型, 也不是List的父類型. 所以這里不能將轉(zhuǎn)換成.

解決方式:

public static void tell(Infoi)中去掉, 使用raw類型, 但這樣就失去了泛型的安全性檢查意義.

更好的方式, 采用通配符.

修改為public static void tell(Info?i)

?

5.?泛型接口

聲明泛型接口和聲明泛型類的語法類似, 也是在接口名稱后面加上.

格式: interface 接口名稱<泛型標(biāo)識(shí)>

interfaceIGen{

public?voidsay();

}

classGenImplimplementsIGen{

privateString?info;

publicGenImpl(String?info){

this.info?=?info;

}

public?voidsetInfo(String?info){

this.info?=?info;

}

public?StringgetInfo(){

returninfo;

}

@Override

public?voidsay(){

System.out.println(this.info);

}

}

publicclassGenericDemo05{

public?static?voidmain(String[]?args){

IGeng?=newGenImpl("泛型接口");

g.say();

}

}

6.?泛型方法

泛型方法中可以定義泛型參數(shù), 此時(shí), 參數(shù)的類型就是傳入數(shù)據(jù)類型.

格式:訪問權(quán)限 <泛型標(biāo)識(shí)> 泛型標(biāo)識(shí) 方法名稱([泛型標(biāo)識(shí) 參數(shù)名稱])

Ttell(T?t){

returnt;

}

}

//?執(zhí)行結(jié)果

Hello

10

7.?泛型數(shù)組

泛型數(shù)組的使用要和泛型方法搭配使用.

在使用泛型方法的時(shí)候, 也可以傳遞或返回一個(gè)泛型數(shù)組.

publicclassGenericDemo07{

public?static?voidmain(String[]?args){

String?arrStr[]?=?{"A","B","C"};

tell(arrStr);

Integer?arrInt[]?=?{1,2,3};

tell(arrInt);

}

publicstaticvoidtell(T?arr[]){

for(inti?=0;?i?<?arr.length;?i++)?{

System.out.println(arr[i]);

}

}

}


最后,如果你跟我一樣都喜歡java,想成為一名優(yōu)秀的程序員,也在學(xué)習(xí)java的道路上奔跑,歡迎你加入java學(xué)習(xí)群:72030155 群內(nèi)每天都會(huì)分享java最新業(yè)內(nèi)資料,分享java免費(fèi)課程,共同交流學(xué)習(xí),讓學(xué)習(xí)變(編)成(程)一種習(xí)慣!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,203評(píng)論 0 3
  • 最近我發(fā)現(xiàn),這個(gè)世界被各種各樣的勵(lì)志書淹沒了,很多作家傾向于把自己或者別人從失敗到成功的經(jīng)歷表達(dá)出來,再配上各種...
    桑與江南閱讀 243評(píng)論 0 1

友情鏈接更多精彩內(nèi)容