java中創建泛型數組並不是不可能,創建泛型數組通過反射,給構造函數傳遞兩個參數,一個類型標記,一個數組大小。‘
簡單Demo如下:
import java.lang.reflect.Array; /** * 創建泛型數組 * @author hetiantian */ public class GenericArrayWithTypeToken<T> { private T[] array; public GenericArrayWithTypeToken(Class<T> type, int size) { array = (T[]) Array.newInstance(type, size); } public static void main(String[] args) { GenericArrayWithTypeToken<House> g = new GenericArrayWithTypeToken<>(House.class, 10); System.out.println(g.array.getClass().getSimpleName()); System.out.println(g.array.length); } }
運行結果:
House[]
10
從結果來看,成功創建了所想要的數組類型,傳遞類型參數到構造器中是為了從擦除中恢復
錯誤的創建方式:
/** * 創建泛型數組 * @author hetiantian */ public class GenericArrayWithTypeToken<T> { private T[] array; public GenericArrayWithTypeToken(int size) { array = (T[]) new Object[size]; } public static void main(String[] args) { GenericArrayWithTypeToken<House> g = new GenericArrayWithTypeToken<>( 10); System.out.println(g.array.getClass().getSimpleName()); System.out.println(g.array.length); } }
數組需要確定的類型,這個Demo中的構造函數相當於T[] array = new T[size]程序運行將會出錯