在泛型方法中直接 new T[10] 會編譯報錯:Cannot create a generic array of T。Java 執行期類型擦除導致無法確定具體類型,故不支援直接建立泛型陣列。
public static <T> T[] creArray(T obj) {
T[] arr = new T[10]; // 編譯錯誤
return arr;
}
import java.lang.reflect.Array;
public static <T> T[] creArray(T obj) {
// 根據傳入物件的實際類型建立陣列
T[] arr = (T[]) Array.newInstance(obj.getClass(), 5);
arr[1] = obj;
System.out.println(arr[1]); // 輸出: ccc
return arr;
}
public class Test {
public static void main(String[] args) {
String a = "ccc";
String[] ar = creArray(a);
for (String art : ar) {
System.out.println(art);
}
}
public static <T> T[] creArray(T obj) {
T[] arr = (T[]) Array.newInstance(obj.getClass(), 5);
arr[1] = obj;
System.out.println(arr[1]);
return arr;
}
}
ccc // 方法內輸出 arr[1] null // main 中迭代輸出:arr[0] ccc // arr[1] null // arr[2] null // arr[3] null // arr[4]
T 執行期才確定,需用反射在執行期動態建立陣列Array.newInstance(Class<?> componentType, int length) 可指定元件類型與長度getClass() 取得實際 Class 物件| 類型 | 預設值 |
|---|---|
| 數值型 | 0 |
| 布林型 | false |
| 字元型 | '\u0000' |
| 物件型 | null |