java相關求助---Java泛型的理解與等價實現---------沒有完全明白啊...請大神指導...__Java

來源:互聯網
上載者:User

1.泛型是Java 1.5的新特性,泛型的本質是參數化型別,也就是說所操作的資料類型被指定為一個參數。這種參數類型可以用在類、介面和方法的        建立中,分別稱為泛型類、泛型介面、泛型方法。

2.Java泛型被引入的好處是安全簡單。

在Java SE 1.5之前,沒有泛型的情況的下,通過對類型Object的引用來實現參數的“任意化”,“任意化”帶來的缺點是要做顯式的強制類型轉     換,而這種轉換是要求開發人員對實際參數類型可以預知的情況下進行的。對於強制類型轉換錯誤的情況,編譯器可能不提示錯誤,在啟動並執行時候才     出現異常,這是一個安全隱患。

泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高代碼的重用率。

泛型在使用中還有一些規則和限制:

1、泛型的型別參數只能是類類型(包括自訂類),不能是簡單類型。

2、同一種泛型可以對應多個版本(因為參數類型是不確定的),不同版本的泛型類執行個體是不相容的。

3、泛型的型別參數可以有多個。

4、泛型的參數類型可以使用extends語句,例如。習慣上成為“有界類型”。

5、泛型的參數類型還可以是萬用字元類型。例如Class classType = Class.forName(java.lang.String);

泛型還有介面、方法等等,內容很多,需要花費一番功夫才能理解掌握並熟練應用。在此給出我曾經瞭解泛型時候寫出的兩個例子(根據看的印象寫的),實現同樣的功能,一個使用了泛型,一個沒有使用,通過對比,可以很快學會泛型的應用,學會這個基本上學會了泛型70%的內容。

例子一:使用了Java泛型

------------------------------------------------------------------------------------------------

這裡我用了javase1.6,但是還是出了錯......具體錯誤以下,如果把錯誤改正的話,那麼就不能發揮泛型的作用,還是需要強制類型轉換這樣就又出     現了安全問題

------------------------------------------------------------------------------------------------------

 public class Gen {  //關鍵在這裡,還是要加Gen<T>,不加會報錯  private T ob; //定義泛型成員變數      public Gen(T ob) {   this.ob = ob;    }      public T getOb() {   return ob;    }      public void setOb(T ob) {   this.ob = ob;    }      public void showTyep() {   System.out.println("T的實際類型是: " + ob.getClass().getName());    }   }     public class GenDemo {    public static void main(String[] args){    //定義泛型類Gen的一個Integer版本    Gen intOb=new Gen(88);    intOb.showTyep();    int i= intOb.getOb();//這裡還是需要強制類型轉換,不轉換會報錯    System.out.println("value= " + i);      System.out.println("----------------------------------");      //定義泛型類Gen的一個String版本    Gen strOb=new Gen("Hello Gen!");    strOb.showTyep();    String s=strOb.getOb();//這裡還是需要強制類型轉換,不轉換會報錯    System.out.println("value= " + s);   }   }  

例子二:沒有使用泛型

 public class Gen2 {    private Object ob; //定義一個通用類型成員      public Gen2(Object ob) {   this.ob = ob;    }      public Object getOb() {   return ob;    }      public void setOb(Object ob) {   this.ob = ob;    }      public void showTyep() {   System.out.println("T的實際類型是: " + ob.getClass().getName());    }   }    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.