談談我眼中的泛型,眼中泛型

來源:互聯網
上載者:User

談談我眼中的泛型,眼中泛型

           很早的時候我就接觸了泛型,但是那個時候並不瞭解泛型有什麼好處,在抽象的過程中使用泛型,後來接觸到了gxpt系統,這個系統架構中,用的是泛型方法.那個時候只是知道這麼用,說是可以解決重複寫代碼的問題,但是我並沒有體會到,後來接觸了Itoo 這個架構,這個裡面用的是泛型類,同時我正在的參與到這個系統中,在跟gxpt相比,我體會到了使用泛型的好處.

一.介紹

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


二.解決問題

         在JDK1.5 還沒有泛型的時候,通過使用類型Object的來實現參數的”任意化”.實現參數任意化需要對顯式進行強制類型轉換.而且這種強制轉換要求開發人員對實際參數類型是預知的.對於強制類型轉換錯誤的情況,編譯器可能不提示錯誤,在啟動並執行時候才出現異常,這是一個很大的安全隱患.如果使用泛型,就可以在編譯階段就發現這個錯誤,並且所有的強制轉換都是自動和隱式的,再一次提高了代碼的複用率.總結一句話就是泛型解決抽象過程中需要顯式強制轉換的問題,把主動變成被動,再次提高代碼的複用率.

 

三.執行個體

無泛型,使用Object+強制轉換實現抽象:

<span style="font-size:18px;">/** * 使用Object 類型,顯示需要強制轉換 * @author huan * */public class NoGen {private Object ob; //定義泛型成員變數public NoGen(Object ob){this.ob=ob;}public Object Getob(){return ob;}public void setOb(Object ob){this.ob=ob;}public void showType(){System.out.println("T的實際類型是:" +ob.getClass().getName());}}public class GenDemo2 {public static void main(String[] args) {//定義泛型類NoGen 的一個Integer版本NoGen intOb=new NoGen(new Integer(88));intOb.showType();int i=(int) intOb.Getob();System.out.println("Value="+i);System.out.println("------------------");//定義泛型類Gen的一個String版本NoGen strOb=new NoGen("Hello Gen!");strOb.showType();String s=(String) strOb.Getob();System.out.println("value="+s);}}</span>

對應類圖:



使用泛型實現抽象:


<span style="font-size:18px;">public class 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 showType(){System.out.println("T的實際類型是:" +ob.getClass().getName());}}/** * 使用泛型 * @author huan * */public class GenDemo {public static void main(String[] args) {//定義泛型類Gen 的一個Integer版本Gen<Integer> intOb=new Gen<Integer>(88);intOb.showType();int i=intOb.Getob();System.out.println("Value="+i);System.out.println("------------------");//定義泛型類Gen的一個String版本Gen<String> strOb=new Gen<String>("Hello Gen!");strOb.showType();String s=strOb.Getob();System.out.println("value="+s);}}</span>

對應類圖:


從兩張類圖可以看出,Object+強制轉換實現的抽象是被動的,使用泛型事項的抽象是主動的.使用主動替換被動,讓封裝的代碼侵入性更小.


四.泛型類與泛型方法的區別

從範圍來說,泛型類的範圍要比泛型方法要小一些.使用泛型類所受到的限制要大一些.

從載入的情況來看,泛型類延遲了載入時間,屬於懶載入.

 

五.總結

1.使用泛型,泛型的中的參數是地址傳值還是按值傳遞.

 答案:是地址傳值

2.從複用性的角度來說,泛型類和泛型方法那個更好.gxpt運用的是泛型方法,itoo使用的泛型類.itoo使用泛型類是為了把底層進行進一步的封裝.提高代碼的複用率.

3.使用集合的時候都會用上泛型,那麼容器是集合+方法,在容器中,泛型也是常用的。所以學習容器的時候,應該先理解泛型的思想.



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.