泛型

泛型

jdk5.0新增特性
注意:1.泛型的類型必須是類势誊,不能是基本數(shù)據(jù)類型剑梳。需要用到基本數(shù)據(jù)類型的位置唆貌,用包裝類替換
2.若實(shí)例化時(shí),沒有指明泛型的類型垢乙。默認(rèn)指明泛型的類型锨咙。默認(rèn)類型為java.lang.Object類型
3.jdk7后新特性:類型推斷

ArrayList<String> list = new ArrayList<String>();
        //新特性,前類型推斷了后類型
        ArrayList<String> list1 = new ArrayList<>();

如何自定義泛型類追逮、泛型接口酪刀;泛型方法

1.定義泛型類

public class OrderT01<T> {//泛型類
    String name;
    int age;
    T orderT;
}

實(shí)例化時(shí)指明泛型類型粹舵,操作更嚴(yán)謹(jǐn)

//未對(duì)操作的泛型指定需要的類型,默認(rèn)Object類型
        OrderT01 o = new OrderT01();
        o.setOrderT("hong");
        o.setOrderT(12);

        //對(duì)泛型指定類型
        OrderT01<String> o1 = new OrderT01<>();
        o1.setOrderT("hong");
//        o1.setOrderT(12);//報(bào)錯(cuò)

繼承泛型時(shí):

//1.繼承泛型類時(shí)骂倘,子類也必須有泛型標(biāo)識(shí);SubOrder01仍是泛型類
//public class SubOrder01<T> extends OrderT01<T> {
//
//}
//2.對(duì)繼承的父類泛型確定其類型時(shí)眼滤,默認(rèn)子類也為此類型;SubOrder01不是泛型類
public class SubOrder01 extends OrderT01<Integer> {
        
}
注意:
//1.泛型類的構(gòu)造器和普通類的構(gòu)造方式一樣
public class OrderT01<T> {//泛型類
         T orderT;
         public OrderT01() {
          }
}

//2.不同類型的泛型不能相互賦值
        ArrayList<String> l1 = null;
        ArrayList<Integer> l2 = null;

        //l1=l2;//泛型不同的引用不能相互賦值

//3.若泛型結(jié)構(gòu)是一個(gè)接口或抽象類历涝,則不可以創(chuàng)建泛型類的對(duì)象

//4.靜態(tài)方法中诅需,不能使用反省類;原因是荧库,泛型類是在創(chuàng)建對(duì)象的時(shí)候使用堰塌,而靜態(tài)結(jié)構(gòu)早于對(duì)象的創(chuàng)建
public class OrderT01<T> {//泛型類
public static void show(T t){   
    }
}

//5.異常類不能是泛型類

//6.
//編譯不通過,原因是分衫,此方式是創(chuàng)建對(duì)象场刑,表明T的類型已經(jīng)確定,但T只是一個(gè)參數(shù)蚪战,并沒有指定確定的類型
//T[] t = new T[10];
        //此種方式可以編譯通過牵现,將創(chuàng)建的Object類型數(shù)組強(qiáng)轉(zhuǎn)成泛型數(shù)組(T[])
        T[] t = (T[]) new Object[10];

//7.子父類關(guān)系泛型
子父類關(guān)系泛型1.png
子父類關(guān)系泛型2.png

2.泛型方法:可以聲明為靜態(tài)的

一個(gè)泛型類中存在如下兩個(gè)方法,其泛型用<E>表示邀桑,
public class Test<T>{//實(shí)例化Test時(shí)瞎疼,確定其T類型
     <T> T[] toArray(T[] a);//泛型方法
    void add(E e); //非泛型方法
}

舉例:自定義泛型方法

public class GenericMethod {
    //泛型方法,在方法中出現(xiàn)了泛型的結(jié)構(gòu)概漱,泛型參數(shù)和類的泛型沒有任何關(guān)系
    //即丑慎,泛型方法所屬類是不是泛型都沒關(guān)系
 //List<E>返回E類型的List數(shù)組;E[] arr參數(shù)為E類型的數(shù)組瓤摧;<E>表示此時(shí)的E是一個(gè)泛型參數(shù),不是一個(gè)類
    public <E> List<E> copyFromArrayList(E[] arr){
        ArrayList<E> list = new ArrayList<>();
        for(E e : arr){
            list.add(e);
        }
        return list;
    }
}

        GenericMethod g = new GenericMethod();
        Integer[] arr = new Integer[]{1,2,5,2};
        //泛型方法在調(diào)用時(shí)指明泛型類型Integer
        List<Integer> integers = g.copyFromArrayList(arr);
        for(Integer i : integers){
            System.out.println(i);
        }
//泛型方法可以聲明為靜態(tài)的玉吁,原因是:泛型參數(shù)是在調(diào)用方法時(shí)才確定其類型照弥,并非在實(shí)例化時(shí)確定
 public static <E> List<E> copyFromArrayList(E[] arr){}

泛型在繼承方面的體現(xiàn)

雖然A類是B類的父類,但是G<A>和G<B>二者不具備子父類關(guān)系进副,二者是并列的这揣;A類是B類的父類(接口),A<G>是B<G>的父類

        ArrayList<Object> a1 = null;
        ArrayList<String> a2 = null;
        a1 = a2;

        List<String> l = null;
        ArrayList<String> a = null;
        l = a;

通配符(影斑?)的使用

雖然A類是B類的父類给赞,但是G<A>和G<B>二者不具備子父類關(guān)系,但二者共同的父類是G<矫户?>

        ArrayList<Object> a1 = null;
        ArrayList<String> a2 = null;
        ArrayList<?> a = null;
        a = a1;
        a = a2;
使用通配符后數(shù)據(jù)的讀取和寫入操作
        List<?> l = null;
        List<String> l2 = new ArrayList<>();
        l2.add("AA");
        l2.add("BB");
        l2.add("CC");

        l = l2;
        //添加(寫入):除null之外片迅,不能向 List<?>添加數(shù)據(jù)
//        l.add("s");
        l.add(null);

        //獲取(讀冉粤伞):允許讀取數(shù)據(jù)柑蛇,類型為Object
        Object o = l.get(0);
        System.out.println(o);//AA
有限制條件的通配符使用

? extends A:( 數(shù)學(xué)中理解芥挣,(-oo,A] )
G<? extends A>可以作為G<A>和G<B>的父類,其中B是A的子類
? super A:( 數(shù)學(xué)中理解耻台,[A,+oo) )
G<? super A>可以作為G<A>和G<B>的父類空免,其中B是A的父類

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苏揣,一起剝皮案震驚了整個(gè)濱河市贸人,隨后出現(xiàn)的幾起案子衙猪,更是在濱河造成了極大的恐慌恰梢,老刑警劉巖梅垄,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杈湾,死亡現(xiàn)場(chǎng)離奇詭異仁锯,居然都是意外死亡锣杂,警方通過查閱死者的電腦和手機(jī)匙姜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門畅厢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氮昧,你說我怎么就攤上這事框杜。” “怎么了袖肥?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵咪辱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我椎组,道長(zhǎng)油狂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任寸癌,我火速辦了婚禮专筷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒸苇。我一直安慰自己磷蛹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布溪烤。 她就那樣靜靜地躺著味咳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪檬嘀。 梳的紋絲不亂的頭發(fā)上槽驶,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音鸳兽,去河邊找鬼掂铐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堡纬。 我是一名探鬼主播聂受,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼烤镐!你這毒婦竟也來了蛋济?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤炮叶,失蹤者是張志新(化名)和其女友劉穎碗旅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镜悉,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祟辟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侣肄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旧困。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖稼锅,靈堂內(nèi)的尸體忽然破棺而出吼具,到底是詐尸還是另有隱情,我是刑警寧澤矩距,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布拗盒,位于F島的核電站,受9級(jí)特大地震影響锥债,放射性物質(zhì)發(fā)生泄漏陡蝇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一哮肚、第九天 我趴在偏房一處隱蔽的房頂上張望登夫。 院中可真熱鬧,春花似錦允趟、人聲如沸悼嫉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蹋凝,卻和暖如春鲁纠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鳍寂。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工改含, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迄汛。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓捍壤,卻偏偏與公主長(zhǎng)得像骤视,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹃觉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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