java泛型(Generics)

作者:lkd_whh

轉(zhuǎn)載請(qǐng)注明出處

泛型的好處

  1. 編譯時(shí)期的強(qiáng)類型檢查尔店。有利于提早發(fā)現(xiàn)問(wèn)題封孙,解決問(wèn)題。

  2. 不用再使用類型強(qiáng)轉(zhuǎn)匿垄。

  3. 能夠利用泛型編寫簡(jiǎn)單易讀的通用代碼移宅。

泛型的使用

  1. 泛型通常命名規(guī)則

    • E - Element

    • K - Key

    • N - Number

    • T - Type

    • V - Value

    • S,U,V 等等。- 第二椿疗,第三漏峰,第四類型。

  1. 泛型類的定義和使用届榄。

    以最常用的Arraylist為例浅乔,我們看下它的定義和使用。當(dāng)我實(shí)例化時(shí)在<>中傳入的類型為Integer時(shí),集合中就無(wú)法再放入其他類型的元素了靖苇,從集合中取得元素時(shí)也不用再?gòu)?qiáng)轉(zhuǎn)席噩。(注意:泛型不支持基本類型,但是我們可以使用它的包裝類型)

    //定義
    public class ArrayList<E>{}
    //使用
    ArrayList<Integer> list=new ArrayList<>();
    list.add(1);
    list.add(2l);//編譯錯(cuò)誤,無(wú)法插入Long類型
    Integer integer=list.get(0);//能夠直接確定取得的是Integer類型
    
  2. 泛型方法贤壁。

    • 聲明方法和泛型類相似悼枢。

    • 作用域僅限于聲明的方法內(nèi)。

    • 靜態(tài)方法脾拆,非靜態(tài)方法馒索,構(gòu)造方法都可以使用。

    • 類型參數(shù)區(qū)段必須出現(xiàn)在方法返回類型之前名船。

        /**
           * 泛型構(gòu)造方法格式
           * @param t
           * @param <T>
           */
          public <T> Generics(T t) {
          }
          /**
           * 非靜態(tài)泛型方法格式
           * @param t
           * @param <T>
           * @return
           */
          public <T> T getNonStatic(T t) {
          }
          /**
           * 靜態(tài)泛型方法格式
           * @param t
           * @param <T>
           */
          public static <T> voTid getStatic(T t) {
          }
    
  1. 類型限定绰上。關(guān)鍵字extends,限制傳入的類型參數(shù)必須為指定的類型或其子類型。

        /**
         * 單個(gè)類型限定
         * @param t
         * @param <V>
         */
        public static <V extends Integer> void singleBondedType(V t) {
            System.out.println(t.intValue());
        }
    
        /**
         * 多個(gè)類型限定包帚,需要同時(shí)滿足條件渔期。
         * 類型限定聲明中類需要聲明在接口前面
         * @param t
         * @param <V>
         */
        public static <V extends Integer & Comparator> void multipleBondedType(V t) {
            System.out.println(t.intValue());
            System.out.println(t.compare(1,2));
        }
    
  2. 通配符(Wildcards)

    • 向上有界通配符(Upper Bounded Wildcards)

    • 無(wú)界通配符(Unbounded Wildcards)

    • 向下有界通配符(Lower Bounded Wildcards)

        /**
           * 上有界通配符
           * @param list
           */
          public static  void upperBoundedWildcards(List<? extends String> list){
          }
    
          /**
           * 無(wú)界通配符
           * @param list
           */
          public static  void unboundedWildcards(List<?> list){
          }
    
          /**
           * 下有界通配符
           * @param list
           */
          public static  void lowerBoundedWildcards(List<? super Integer> list){
          }
    

ps: 你可以用通配符指定一個(gè)上界运吓,也可以指定一個(gè)下界渴邦,但不能同時(shí)指定。

  1. 泛型的限制

    • 不接受基本類型當(dāng)作參數(shù)拘哨。

    • 不能通過(guò)new泛型來(lái)實(shí)例化對(duì)象谋梭,但是可以通過(guò)反射來(lái)實(shí)現(xiàn)。

    • 不能聲明靜態(tài)泛型變量倦青。

    • 不能對(duì)泛型參數(shù)使用castinstanceof瓮床。

    • 不能創(chuàng)建泛型型數(shù)組,比如

      List<Integer>[] arrayOfLists = new List<Integer>[2];  // 編譯錯(cuò)誤
      
    • 由于類型擦除機(jī)制产镐,不能通過(guò)泛型重載方法隘庄。

      //編譯錯(cuò)誤   
      public void print(Set<String> strSet) { }
      public void print(Set<Integer> intSet) { }
      

      ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市癣亚,隨后出現(xiàn)的幾起案子丑掺,更是在濱河造成了極大的恐慌,老刑警劉巖述雾,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件街州,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡玻孟,警方通過(guò)查閱死者的電腦和手機(jī)唆缴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)黍翎,“玉大人面徽,你說(shuō)我怎么就攤上這事∠坏В” “怎么了趟紊?”我有些...
    開(kāi)封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵质礼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我织阳,道長(zhǎng)眶蕉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任唧躲,我火速辦了婚禮造挽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弄痹。我一直安慰自己饭入,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布肛真。 她就那樣靜靜地躺著谐丢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚓让。 梳的紋絲不亂的頭發(fā)上乾忱,一...
    開(kāi)封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音历极,去河邊找鬼窄瘟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趟卸,可吹牛的內(nèi)容都是我干的蹄葱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锄列,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼图云!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起邻邮,我...
    開(kāi)封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤竣况,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后饶囚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帕翻,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年萝风,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嘀掸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡规惰,死狀恐怖睬塌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤揩晴,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布勋陪,位于F島的核電站,受9級(jí)特大地震影響硫兰,放射性物質(zhì)發(fā)生泄漏诅愚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一劫映、第九天 我趴在偏房一處隱蔽的房頂上張望违孝。 院中可真熱鬧,春花似錦泳赋、人聲如沸雌桑。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)校坑。三九已至,卻和暖如春千诬,著一層夾襖步出監(jiān)牢的瞬間耍目,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工大渤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留制妄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓泵三,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親衔掸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烫幕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)敞映,斷路器较曼,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 開(kāi)發(fā)人員在使用泛型的時(shí)候,很容易根據(jù)自己的直覺(jué)而犯一些錯(cuò)誤振愿。比如一個(gè)方法如果接收List作為形式參數(shù)捷犹,那么如果嘗試...
    時(shí)待吾閱讀 1,055評(píng)論 0 3
  • 一萍歉、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,261評(píng)論 0 16
  • 泛型 泛型由來(lái) 泛型字面意思不知道是什么類型,但又好像什么類型都是档桃∏购ⅲ看前面用到的集合都有泛型的影子。 以Array...
    向日花開(kāi)閱讀 2,194評(píng)論 2 6
  • 偷偷給栓在門口不能跑不能跳的小貓吃小魚(yú)干并不是一件我做的好心事 小貓是別人家的不應(yīng)我來(lái)管小魚(yú)干也是小魚(yú)自己在大海里...
    葺寶閱讀 1,019評(píng)論 0 2