多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > Java泛型的其他應(yīng)用——泛型接口、泛型方法、泛型數(shù)組以及泛型的嵌套設(shè)置

Java泛型的其他應(yīng)用——泛型接口、泛型方法、泛型數(shù)組以及泛型的嵌套設(shè)置

來源:程序員人生   發(fā)布時(shí)間:2016-07-11 15:50:15 閱讀次數(shù):3326次

學(xué)習(xí)目標(biāo)

掌握泛型接口的使用
掌握泛型方法的定義的及使用
掌握泛型數(shù)組的使用
掌握泛型的嵌套設(shè)置

之前所有的操作都是在類中直接使用泛型操作的,那末,對(duì)Java來講,也能夠直接在接口中定義及使用泛型。

定義泛型接口

在JDK1.5以后,不單單可以聲明泛型類,也能夠聲明泛型接口,聲明泛型接口和聲明泛型類的語法類似,也是在接口名稱后面加上<T>,以下格式所示:
[訪問權(quán)限]  interface 接口名稱<泛型標(biāo)識(shí)>{}
interface Info<T>{ // 在接口上定義泛型 public T getVar() ; // 定義抽象方法,抽象方法的返回值就是泛型類型 }
如果現(xiàn)在1個(gè)子類實(shí)現(xiàn)此接口但是沒有進(jìn)行正確的實(shí)現(xiàn),則在編譯時(shí)會(huì)出現(xiàn)正告信息。
interface Info<T>{ public T getVar(); } class InfoImpl implements Info{ public String getVar(){ return null; } }
  以上的操作,其實(shí)不是1個(gè)子類實(shí)現(xiàn)泛型的最好操作,最好在實(shí)現(xiàn)的時(shí)候也指定具體的泛型類型。

 泛型接口實(shí)現(xiàn)的兩種方式

定義子類:在子類的定義上在也聲明泛型類型。
interface Info<T>{ // 在接口上定義泛型 public T getVar() ; // 定義抽象方法,抽象方法的返回值就是泛型類型 } class InfoImpl<T> implements Info<T>{ // 定義泛型接口的子類 private T var ; // 定義屬性 public InfoImpl(T var){ // 通過構(gòu)造方法設(shè)置屬性內(nèi)容 this.setVar(var) ; } public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } }; public class GenericsDemo24{ public static void main(String arsg[]){ Info<String> i = null; // 聲明接口對(duì)象 i = new InfoImpl<String>("劉勛") ; // 通過子類實(shí)例化對(duì)象 System.out.println("內(nèi)容:" + i.getVar()) ; } };


如果現(xiàn)在實(shí)現(xiàn)接口的子類不想使用泛型聲明,則在實(shí)現(xiàn)接口的時(shí)候直接直接指定好具體的操作類型便可。
interface Info<T>{ // 在接口上定義泛型 public T getVar() ; // 定義抽象方法,抽象方法的返回值就是泛型類型 } class InfoImpl implements Info<String>{ // 定義泛型接口的子類 private String var ; // 定義屬性 public InfoImpl(String var){ // 通過構(gòu)造方法設(shè)置屬性內(nèi)容 this.setVar(var) ; } public void setVar(String var){ this.var = var ; } public String getVar(){ return this.var ; } }; public class GenericsDemo25{ public static void main(String arsg[]){ Info i = null; // 聲明接口對(duì)象 i = new InfoImpl("李興華") ; // 通過子類實(shí)例化對(duì)象 System.out.println("內(nèi)容:" + i.getVar()) ; } };
對(duì)后者,常常使用。

泛型方法

之前的所有泛型除可以為類中的屬性指定類型以外,也能夠定義方法,泛型方法所在的類中是不是是泛型類本身是沒有任何關(guān)系的。

定義泛型方法

泛型方法可以定義泛型參數(shù),此時(shí),參數(shù)的類型就是傳入數(shù)據(jù)的類型,使用以下格式定義泛型方法。
泛型方法的簡單定義:
[訪問權(quán)限]<泛型標(biāo)示> 泛型標(biāo)示 方法名稱([泛型標(biāo)示 參數(shù)名稱])
 程序?qū)嵗韵拢?/span>
class Demo{ public <T> T fun(T t){ // 可以接收任意類型的數(shù)據(jù) return t ; // 直接把參數(shù)返回 } }; public class GenericsDemo26{ public static void main(String args[]){ Demo d = new Demo() ; // 實(shí)例化Demo對(duì)象 String str = d.fun("劉勛") ; // 傳遞字符串 int i = d.fun(24) ; // 傳遞數(shù)字,自動(dòng)裝箱 System.out.println(str) ; // 輸出內(nèi)容 System.out.println(i) ; // 輸出內(nèi)容 } };

通過泛型方法返回泛型類的實(shí)例

由于之前的代碼中可以發(fā)現(xiàn),只要在方法中定義了泛型操作,則可以傳遞任意的數(shù)據(jù)類型。
程序示例以下:
class Info<T extends Number>{ // 指定上限,只能是數(shù)字類型 private T var ; // 此類型由外部決定 public T getVar(){ return this.var ; } public void setVar(T var){ this.var = var ; } public String toString(){ // 覆寫Object類中的toString()方法 return this.var.toString() ; } }; public class GenericsDemo27{ public static void main(String args[]){ Info<Integer> i = fun(20) ; System.out.println(i.getVar()) ; } public static <T extends Number> Info<T> fun(T param){ Info<T> temp = new Info<T>() ; // 根據(jù)傳入的數(shù)據(jù)類型實(shí)例化Info temp.setVar(param) ; // 將傳遞的內(nèi)容設(shè)置到Info對(duì)象的var屬性當(dāng)中 return temp ; // 返回實(shí)例化對(duì)象 } };

使用泛型統(tǒng)1傳入?yún)?shù)的類型

如果在1些操作中,希望傳遞的泛型類型是1致的類型。
實(shí)例以下:
class Info<T>{ // 指定上限,只能是數(shù)字類型 private T var ; // 此類型由外部決定 public T getVar(){ return this.var ; } public void setVar(T var){ this.var = var ; } public String toString(){ // 覆寫Object類中的toString()方法 return this.var.toString() ; } }; public class GenericsDemo28{ public static void main(String args[]){ Info<String> i1 = new Info<String>() ; Info<String> i2 = new Info<String>() ; i1.setVar("HELLO") ; // 設(shè)置內(nèi)容 i2.setVar("liuxun") ; // 設(shè)置內(nèi)容 add(i1,i2) ; } public static <T> void add(Info<T> i1,Info<T> i2){ System.out.println(i1.getVar() + " " + i2.getVar()) ; } };

但是如果傳遞到add定單中的兩個(gè)泛型類型不統(tǒng)1,則會(huì)出現(xiàn)毛病。
class Info<T>{ // 指定上限,只能是數(shù)字類型 private T var ; // 此類型由外部決定 public T getVar(){ return this.var ; } public void setVar(T var){ this.var = var ; } public String toString(){ // 覆寫Object類中的toString()方法 return this.var.toString() ; } }; public class GenericsDemo29{ public static void main(String args[]){ Info<Integer> i1 = new Info<Integer>() ; Info<String> i2 = new Info<String>() ; i1.setVar(20) ; // 設(shè)置內(nèi)容 i2.setVar("liuxun") ; // 設(shè)置內(nèi)容 add(i1,i2) ; // X :此處由于類型不1致就會(huì)出現(xiàn)毛病 } public static <T> void add(Info<T> i1,Info<T> i2){ System.out.println(i1.getVar() + " " + i2.getVar()) ; } };

泛型數(shù)組

使用泛型方法的時(shí)候,也能夠傳遞或返回1個(gè)泛型數(shù)組。
程序以下:
public class GenericsDemo30{ public static void main(String args[]){ Integer i[] = fun1(1,2,3,4,5,6) ; // 返回泛型數(shù)組 fun2(i) ; } public static <T> T[] fun1(T...arg){ // 接收可變參數(shù) return arg ; // 返回泛型數(shù)組 } public static <T> void fun2(T param[]){ // 輸出 System.out.print("接收泛型數(shù)組:") ; for(T t:param){ System.out.print(t + "、") ; } } };

注意:... 表示可變參數(shù) ,可以傳遞任意多的參數(shù),可以當(dāng)數(shù)組進(jìn)行處理。

泛型的嵌套設(shè)置

之前所說的全部泛型操作,都是直接通過實(shí)例化類的時(shí)候完成,固然,在設(shè)置的時(shí)候也會(huì)看見嵌套的設(shè)置情勢。
程序?qū)嵗韵拢?/span>
class Info<T,V>{ // 接收兩個(gè)泛型類型 private T var ; private V value ; public Info(T var,V value){ this.setVar(var) ; this.setValue(value) ; } public void setVar(T var){ this.var = var ; } public void setValue(V value){ this.value = value ; } public T getVar(){ return this.var ; } public V getValue(){ return this.value ; } }; class Demo<S>{ private S info ; public Demo(S info){ this.setInfo(info) ; } public void setInfo(S info){ this.info = info ; } public S getInfo(){ return this.info ; } }; public class GenericsDemo31{ public static void main(String args[]){ Demo<Info<String,Integer>> d = null ; // 將Info作為Demo的泛型類型 Info<String,Integer> i = null ; // Info指定兩個(gè)泛型類型 i = new Info<String,Integer>("劉勛",20) ; // 實(shí)例化Info對(duì)象 d = new Demo<Info<String,Integer>>(i) ; // 在Demo類中設(shè)置Info類的對(duì)象 System.out.println("內(nèi)容1:" + d.getInfo().getVar()) ; System.out.println("內(nèi)容2:" + d.getInfo().getValue()) ; } };


總結(jié):

1、泛型在接口上可以定義,及其實(shí)現(xiàn)的方式。
2、泛型在使用的時(shí)候可以進(jìn)行嵌套的操作,只要根據(jù)其操作語法便可。
3、泛型方法上使用泛型標(biāo)記的時(shí)候需要先聲明,一樣可以指定其操作的上限和下限。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美成a| 成人精品福利 | 精品国产中文一级毛片在线看 | 欧美人与牲动交a欧美精品 欧美人与牲动交xxxx | 国产亚洲人成网站在线观看不卡 | 欧美一区二区三区精品影视 | 一级做a爰片性色毛片2021 | 免费观看黄色的网站 | v片在线播放 | 波多洁野衣一二区三区| 天天综合天天做天天综合 | 天堂mv亚洲mv在线播放9蜜 | 最近视频中文在线播放 | 亚洲欧美日本人成在线观看 | 视频在线观看免费播放www | 成人在色线视频在线观看免费大全 | 不卡一级aaa全黄毛片 | 国产成人精品aaaa视频一区 | 九九精品免视看国产成人 | 日本护士xxxx在线播放 | 天堂入口| 亚洲网站视频 | 波多野结衣午夜 | 成人免播放器午夜视频 | 可以在线观看的黄色网址 | 性欧美18一19sex高清 | 亚洲在线偷拍自拍 | 日本亚洲成高清一区二区三区 | 特一级黄色毛片 | 亚洲高清成人欧美动作片 | 欧美国产精品一区二区免费 | 国产高清一区 | 另类图片 亚洲 校园 小说区 | 欧美最猛性xxxx | 亚洲成人毛片 | 免费看黄色的网站 | 18到20女人一级毛片 | 国产亚洲一区二区三区不卡 | 久久精品亚洲精品国产欧美 | 中国明星freesexhd图片 | 亚洲精品一二三区-久久 |