靜態方法要想范化,需要指定其類型參數
非范化類型中的實例方法要想范化,也需要制定其類型參數。
范化類型中的實力方法可以直接使用其類型本身的類型參數。
范型不是協變的,即List<Integer>不是List<Number>的子類。
不能實例化范型類型的數組,即new List<String>[3] 是不合法的,除非類型參數是一個未綁定的通配符,即new List<?>[3] 是合法的。
構造延遲,在代碼編寫時我們不能通過類型參數來構造一個該類型的實例,原因是我們不知道如何構造,類型參數的實際類型是在運行時確定的。
對於注意5所描述的問題我們有一個解決方法是List<String> list = (List<String>[]) new Object[3];但是如果是運行時建立數組呢,類型信息是運行時確定的,那就換種寫法T[] tarray = (T[]) new Object[3];
上面的數組構造是不被推薦的,最好的方法是將類型信息傳遞到方法中,如method(Class<V> type) { V[] array = (V[])Array.newInstance(type, length); },可以參考ArrayList類的toArray(T[] a)方法的實現。
構造通配符引用,如果set是一個Set<?>類型,則Set<?> set2 = new HashSet<?>(set);是不合法的,改成Set<?> set2 = new HashSet<Object>(set);就合法了。