使用Java范型需要注意的地方
- 靜態方法要想范化,需要指定其類型參數
- 非范化類型中的實例方法要想范化,也需要制定其類型參數。
- 范化類型中的實力方法可以直接使用其類型本身的類型參數。
- 范型不是協變的,即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);就合法了。
多角度看 Java 中的泛型
了解泛型
使用通配符簡化泛型使用
posted on 2008-10-23 13:59 Eric Song 閱讀(1477) 評論(2) 編輯 收藏 所屬分類: Java