1. 程式人生 > >泛型T ?

泛型T ?

public static void printColl(ArrayList<?> al){
                Iterator<?> it = al.iterator();
                while(it.hasNext())
                {
                        System.out.println(it.next().toString());
                }
?和T都表示不確定的型別  但如果是T的話 函式裡面可以對T進行操作 比如while裡面可以這樣寫
T t = it.next();
System.out.println(t);
T自定義泛型和?萬用字元泛型
1.在整個類中只有一處使用了泛型,使用時注意加了泛型了引數不能呼叫與引數型別有關的方法比如“+”,比如打印出任意引數化型別集合中的所有內容,就適合用萬用字元泛型<?>
public static void printCollecton(Collection <?> collection)
{
for(Object obj: collection)
{
System.out.println(obj);
}
}
2. 當一個型別變臉用來表達兩個引數之間或者引數與返回值之間的關係時,即統一各型別變數在方法簽名的兩處被使用,或者型別變數在方法體程式碼中也被使用而不僅 僅在簽名的時候使用,這是應該用自定義泛型<T>。泛型方可以呼叫一些時間型別的方法。比如集合的add方法。
//自定義泛型<T>和 返回型別為自定義型別
public static <T> T autoConvertType(T obj)
{
     return(T)obj;
}
泛型三種:
          [1]ArrayList<T> al=new ArrayList<T>();指定集合元素只能是T型別
          [2]ArrayList<?> al=new ArrayList<?>();集合元素可以是任意型別,這種沒有意義,一般是方法中,只是為了說明用法
          [3]ArrayList<? extends E> al=new ArrayList<? extends E>();
            泛型的限定:
               ? extends E:接收E型別或者E的子型別。
               ?super E:接收E型別或者E的父型別。