Java為什麼要在1.5之後增加泛型

來源:互聯網
上載者:User

標籤:java   程式   opened   取值   問題   編譯   傳回值   分享   解決   

  一個新技術的誕生,必定有其曆史原因,通過究其曆史,也能加深對技術的理解。

  Java1.5之後增加了泛型的使用,那麼為什麼要增加泛型呢?本文主要講述這個問題。

  首先考慮一下如下的情況,

  

 1 package com.test.generic; 2  3 public class GenericTest { 4     private Boolean f; 5  6     public Boolean getF() { 7         return f; 8     } 9 10     public void setF(Boolean f) {11         this.f = f;12     }13     14     15 }
View Code

 

 1 package com.test.generic; 2  3 public class GenericTest1 { 4     private String s; 5  6     public String getS() { 7         return s; 8     } 9 10     public void setS(String s) {11         this.s = s;12     }13     14 }
View Code

  GenericTest和GenericTest1這兩個類的實現的功能相同,只是方法的傳回值和成員變數之間的差異,對於一些工具類來說,往往會對不同的資料類型進行處理,那麼此時,就需要增加大量的對不同類型的資料處理的類,對於一個工程來說,這是可怕並且無意義的工作。在泛型之前,也有一個比較好的處理方式,如類GenericTest2,我們可以採用Object(介面或者父類)的類型,來實現對不同類型資料的處理。但這也不夠完美,首先,每一次傳進去的資料和取出來的資料必須一致,即使不一致,編譯器也不會報錯或者IDE也不會提醒問題;其次,假定傳入的Object對象是String,但是我取值是強制轉換成Integer,這在編譯的時候也不會報錯,運行時就會出現ClassCastException,這樣問題就無法在編譯時間出現,對於程式來說,健壯性大大降低。所以,在Java1.5之後出現了泛型來解決這些問題。

 1 package com.testeneric; 2  3 public class GenericTest2 { 4     private Object o; 5  6     public Object getO() { 7         return o; 8     } 9 10     public void setO(Object o) {11         this.o = o;12     }13         14 }
View Code

如類GenericTest3

 1 package com.test.generic; 2  3 public class GenericTest3<T> { 4     private T o; 5  6     public T getO() { 7         return o; 8     } 9 10     public void setO(T o) {11         this.o = o;12     }13     14     public static void main(String[] args) {15         GenericTest3<String> test1 = new GenericTest3<String>();16         17         test1.setO("hello");18         System.out.println(test1.getO());19     }20 }
View Code

這樣類的參數類型是T,那麼什麼類型都可以傳入到類中,實現了對不同類型的資料進行處理,並且在使用的時候,如果使用的是IDE,那麼一旦確認下來T是什麼類型,編譯器就會提示該類型,只要編譯的時候沒有問題,那麼運行時也不會出現問題。

 

Java為什麼要在1.5之後增加泛型

聯繫我們

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