使用Java范型需要注意的地方
- 靜態(tài)方法要想范化,需要指定其類(lèi)型參數(shù)
- 非范化類(lèi)型中的實(shí)例方法要想范化,也需要制定其類(lèi)型參數(shù)。
- 范化類(lèi)型中的實(shí)力方法可以直接使用其類(lèi)型本身的類(lèi)型參數(shù)。
- 范型不是協(xié)變的,即List<Integer>不是List<Number>的子類(lèi)。
- 不能實(shí)例化范型類(lèi)型的數(shù)組,即
new List<String>[3]
是不合法的,除非類(lèi)型參數(shù)是一個(gè)未綁定的通配符,即new List<?>[3]
是合法的。
- 構(gòu)造延遲,在代碼編寫(xiě)時(shí)我們不能通過(guò)類(lèi)型參數(shù)來(lái)構(gòu)造一個(gè)該類(lèi)型的實(shí)例,原因是我們不知道如何構(gòu)造,類(lèi)型參數(shù)的實(shí)際類(lèi)型是在運(yùn)行時(shí)確定的。
- 對(duì)于注意5所描述的問(wèn)題我們有一個(gè)解決方法是List<String> list = (List<String>[]) new Object[3];但是如果是運(yùn)行時(shí)建立數(shù)組呢,類(lèi)型信息是運(yùn)行時(shí)確定的,那就換種寫(xiě)法T[] tarray = (T[]) new Object[3];
- 上面的數(shù)組構(gòu)造是不被推薦的,最好的方法是將類(lèi)型信息傳遞到方法中,如method(Class<V> type) { V[] array = (V[])Array.newInstance(type, length); },可以參考ArrayList類(lèi)的toArray(T[] a)方法的實(shí)現(xiàn)。
- 構(gòu)造通配符引用,如果set是一個(gè)Set<?>類(lèi)型,則Set<?> set2 = new HashSet<?>(set);是不合法的,改成Set<?> set2 = new HashSet<Object>(set);就合法了。
多角度看 Java 中的泛型
了解泛型
使用通配符簡(jiǎn)化泛型使用
posted on 2008-10-23 13:59 Eric Song 閱讀(1478) 評(píng)論(2) 編輯 收藏 所屬分類(lèi): Java