java 泛型中的T和?

類型原本有:簡單類型和複雜類型,引入泛型後把複雜類型分的更細了;框架

    • 如今List, List 是 兩種不一樣的類型;且 無繼承關係;ui

    • 泛型的好處如:spa

      開始版本scala

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

      泛型版本code

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

      簡便了代碼繼承

定義泛型

      • 1.定義在類後面接口

        緊跟類名後面編譯器

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

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

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

        緊跟修飾符後面(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.實例化定義方法上的泛型

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

通配符(?)

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

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

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

相關文章
相關標籤/搜索