java 泛型中 T 和 問號(通配符)的區別(轉)


摘要: [參考](http://blog.csdn.net/jinuxwu/article/details/6771121)

java 泛型中 T 和 問號(通配符)的區別

類型本來有:簡單類型和復雜類型,引入泛型后把復雜類型分的更細了;

  • 現在List<Object>, List<String>是兩種不同的類型;且無繼承關系;

  • 泛型的好處如:

    開始版本

      public void write(Integer i, Integer[] ia); public void write(Double d, Double[] da); 

    泛型版本

      public <T> void write(T t, T[] ta); 

    簡便了代碼

定義泛型

  • 1.定義在類后面

    緊跟類名后面

      public class TestClassDefine<T, S extends T>{} 

    定義泛型 T, S, 且S 繼承 T

  • 2.定義在方法裝飾符后面

    緊跟修飾符后面(public)

      public <T, S extends T> T testGenericMethodDefine(T t, S s){} 

    定義泛型 T, S, 且S 繼承 T

實例化泛型

  • 1.實例化定義在類上的泛型

第一聲明類變量或者實例化時。例如

     List<String> list; list = new ArrayList<String>; 

第二繼承類或者實現接口時。例如

 public class MyList<E> extends ArrayList<E> implements List<E> {...} 
  • 2.實例化定義方法上的泛型<br/>

當調用范型方法時,編譯器自動對類型參數(泛型)進行賦值,當不能成功賦值時報編譯錯誤

通配符(?)

上面有泛型的定義賦值;當在賦值的時候,上面一節說賦值的都是為具體類型,當賦值的類型不確定的時候,我們用通配符(?)代替了:

 List<?> unknownList; List<? extends Number> unknownNumberList; List<? super Integer> unknownBaseLineIntgerList; 

在Java集合框架中,對於參數值是未知類型的容器類,只能讀取其中元素,不能向其中添加元素, 因為,其類型是未知,所以編譯器無法識別添加元素的類型和容器的類型是否兼容,唯一的例外是NULL

轉自:https://my.oschina.net/jiemachina/blog/201507


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM