java 泛型數組 深度解析

泛型數組 只能作爲參數類型 或者 函數參數

在Java中,Object[]數組可以是任何數組的父類,或者說,任何一個數組都可以向上轉型成父類的數組,這個時候如果我們往裏面放不同於原始數據類型 但是滿足後來使用的父類類型的話,編譯不會有問題,但是在運行時會檢查加入數組的對象的類型,於是會拋ArrayStoreException:

 

String[] strArray = new String[20];

Object[] objArray = strArray;

objArray[0] = new Integer(1); // throws ArrayStoreException at runtime


一、參數類型
1.  泛型list的數組,形如:ArrayList<T>[]
ArrayList<T>[] list = new ArrayList<T>[n];
for(int i = 0; i < n; i++){
list[i] = new ArrayList<T>;
}

2.泛型數組的集合,形如:ArrayList<T[n]>
import java.lang.reflect.Array;
...
ArrayList<T[n]> lst = new ArrayList<T[n]>;
lst.add((T[])Array.newInstance(type,size));
Type類型爲Class<T>,需要調用者指定,size爲要開闢的數組長度;
另外,具體創建數組中的參數,也需要用type來指定。
T[] t = lst.get(0);
for (int i = 0; i < size; i++)
t[] = type.newInstance();
二、 函數參數
  1. public static <T> T[] fun1(T...arg){  // 接收可變參數  
  2.         return arg ;            // 返回泛型數組  
  3.     }  
  4.     public static <T> void fun2(T param[]){   // 輸出  
  5.         System.out.print("接收泛型數組:") ;  
  6.         for(T t:param){  
  7.             System.out.print(t + "、") ;  
  8.         }  
  9.     } 

三、不能作爲實際塊內代碼存在
public class GArrayT<T> {
private T[] arr;//這樣是不行的

public GArrayT(int capacity) {
arr = new T[capacity];
System.out.println("End");
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章