Java 泛型解讀

泛型的初認識

  1. 泛型是在JDK1.5之后增加的新功能。泛型(Generic)
  2. 泛型可以解決數(shù)據(jù)類型的安全性問題糠惫,在類的聲明時通過一個標(biāo)示表示類中某個屬性的類型或者是某個方法的返回值及參數(shù)類型谢床。
  3. 大致格式:
    • 訪問權(quán)限 class 類名稱 <泛型,泛型,...> {
      屬性
      方法
      }
  4. 對象的創(chuàng)建: 類名稱<具體類型> 對象名稱 = new 類名稱<具體類型>();
  • 將上篇泛型認識前篇中的 Point 類用泛型優(yōu)化

class Point<T>{
private T x;
private T y;
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public T getY() {
return y;
}
public void setY(T y) {
this.y = y;
}
}
public class Generics {
public static void main(String[] args) {
// TODO Auto-generated method stub
Point<Integer> point = new Point<Integer>();
point.setX(10);
point.setY(29);
System.out.println("打印坐標(biāo):"+
point.getX()+","+point.getY());
}
}

通過使用泛型的例子與上篇做相應(yīng)代碼比較可發(fā)現(xiàn)作谭,在創(chuàng)建對象初始化坐標(biāo)時比較方便,需要什么類型數(shù)據(jù)的坐標(biāo)鞋吉,直接在 <> 類加入相應(yīng)的類名就行鸦做。

- 指定多個泛型,只需在尖括號 <> 中用逗號“,”分開就行谓着。例如:

    ```
class Demo<T,K>{
    private T take;
    private K key;        
}

泛型的構(gòu)造方法

  • 構(gòu)造方法可以為類中的屬性初始化泼诱,那么如果類中的屬性通過泛型指定,又需要構(gòu)造方法來設(shè)置其內(nèi)容的時候赊锚,那么構(gòu)造方法的定語與普通類的構(gòu)造方法并無大同治筒,不需要像聲明類那樣指定泛型。
    • 在上訴代碼 泛型類 Point 中加入構(gòu)造方法:
public Point(T x,T y){
    this.x = x;
    this.y = y;
}
- 在對象實例化時使用構(gòu)造方法:
```

Point<String> point1 = new Point<String>("經(jīng)度1","緯度2")舷蒲;
```

泛型 - 通配符

class Info<T>{
    private T key;
    public T getKey() {
        return key;
    }
    public void setKey(T key) {
        this.key = key;
    }
    @Override
    public String toString(){
        return this.getKey().toString();
    }
}

public class Generics2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Info<String> info = new Info<String>();
        info.setKey("Java學(xué)習(xí)");
        read(info);
    }
    public static void read(Info<?> t) {
        //這里用 耸袜?通配符代表任意類型,使用Object會出錯牲平,不寫<?>會有警告
        System.out.println(t.toString());
    }
}

泛型接口

  • 泛型接口的創(chuàng)建于泛型類的創(chuàng)界并無大同堤框,只是將 class 變?yōu)?interface, 但是實現(xiàn)接口的類必須將接口的方法實現(xiàn)。

泛型方法

  • 泛型方法與泛型類并沒有必然的聯(lián)系,泛型方法有自己的類型參數(shù)蜈抓,在普通類中也可以定義泛型方法启绰。泛型方法中的T1、T2與泛型類中的T1沟使、T2沒有必然的聯(lián)系酬土,也可以使用其他的標(biāo)識符來代替。
  • 泛型方法中可以定義泛型參數(shù)格带,此時參數(shù)的類型就是傳入的數(shù)據(jù)類型
class Gener{
    //泛型方法 返回一 T 類型的數(shù)據(jù) 
    public <T> T returnT(T t) { 
        return t;    
        }
}
public class Generics3 {

    public static void main(String[] args) {
        Gener gener = new Gener();
        //泛型方法的調(diào)用方便傳入任意類型的數(shù)據(jù)
        String str  = gener.returnT("Java學(xué)習(xí)");
        System.out.println(str);
        int i = gener.returnT(10);
        System.out.println(i);
    }
}

泛型數(shù)組

  • 在創(chuàng)建一個泛型方法時撤缴,也可以傳遞或者返回一個泛型數(shù)組
class Gener{
    //傳遞一個泛型數(shù)組
    public <T> void returnT(T t[]) { 
            for (int i = 0; i < t.length; i++) {
                System.out.print(t[i]);
            }
        }
}
public class Generics3 {

    public static void main(String[] args) {
        Gener gener = new Gener();
        String arr[] ={"Java","學(xué)","習(xí)"};
        gener.returnT(arr);
    }
}

泛型摩擦

  • 如在定義某一個泛型類,在實例化過程中叽唱,沒有指明具體類型屈呕,那么就是自動擦除泛型類型。編譯器就將生成一種與泛型類同名的原始類棺亭,但是類型參數(shù)都被刪除了虎眨。

總結(jié) - 泛型的好處

  1. 類型安全
  2. 消除強制類型轉(zhuǎn)換
  3. 潛在性能收益
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市镶摘,隨后出現(xiàn)的幾起案子嗽桩,更是在濱河造成了極大的恐慌,老刑警劉巖凄敢,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碌冶,死亡現(xiàn)場離奇詭異,居然都是意外死亡涝缝,警方通過查閱死者的電腦和手機扑庞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拒逮,“玉大人罐氨,你說我怎么就攤上這事√苍” “怎么了栅隐?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長玩徊。 經(jīng)常有香客問我租悄,道長,這世上最難降的妖魔是什么佣赖? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任恰矩,我火速辦了婚禮,結(jié)果婚禮上憎蛤,老公的妹妹穿的比我還像新娘外傅。我一直安慰自己纪吮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布萎胰。 她就那樣靜靜地躺著碾盟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪技竟。 梳的紋絲不亂的頭發(fā)上冰肴,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音榔组,去河邊找鬼熙尉。 笑死,一個胖子當(dāng)著我的面吹牛搓扯,可吹牛的內(nèi)容都是我干的检痰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼锨推,長吁一口氣:“原來是場噩夢啊……” “哼铅歼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起换可,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤椎椰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沾鳄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慨飘,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年洞渔,在試婚紗的時候發(fā)現(xiàn)自己被綠了套媚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡磁椒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玫芦,到底是詐尸還是另有隱情浆熔,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布桥帆,位于F島的核電站医增,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏老虫。R本人自食惡果不足惜叶骨,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祈匙。 院中可真熱鬧忽刽,春花似錦天揖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伞剑,卻和暖如春斑唬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背黎泣。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工恕刘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抒倚。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓褐着,卻偏偏與公主長得像,于是被迫代替她去往敵國和親衡便。 傳聞我的和親對象是個殘疾皇子献起,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 我們知道,使用變量之前要定義镣陕,定義一個變量時必須要指明它的數(shù)據(jù)類型谴餐,什么樣的數(shù)據(jù)類型賦給什么樣的值。 假如我們現(xiàn)在...
    e347afbb188e閱讀 295評論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法呆抑,類相關(guān)的語法岂嗓,內(nèi)部類的語法,繼承相關(guān)的語法鹊碍,異常的語法厌殉,線程的語...
    子非魚_t_閱讀 31,581評論 18 399
  • 對象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法,而不是構(gòu)造函數(shù)創(chuàng)建對象:僅僅是創(chuàng)建對象的方法侈咕,并非Fa...
    孫小磊閱讀 1,963評論 0 3
  • 三月末公罕,為了黿頭渚的櫻花,幾乎是說走就走買了動車票耀销。 因為目的性強楼眷,無錫的其他地方我沒有去。(實際上熊尉,無錫除了黿頭...
    Mildred_inside閱讀 1,306評論 4 7
  • 序 在故事開始之前的這一部分罐柳,純粹是敘述者的自言自語,趕時間的讀者大可跳過不看狰住。 不過從某種程度上來說张吉,整本書無非...
    漁盞閱讀 490評論 1 2