Không viết được new T[10] hay new List<String>[10] vì generics bị xoá kiểu (type erasure) còn array thì reified (mang thông tin kiểu phần tử lúc runtime). Hai cơ chế xung khắc.
Array kiểm tra kiểu lúc runtime: gán sai kiểu → ArrayStoreException. Nhưng sau erasure, T biến thành Object — runtime không còn biết T là gì để kiểm, nên mảng generic sẽ phá vỡ đảm bảo an toàn kiểu của array.
java
List<String>[] arr = new List<String>[2]; // compile error
// giả sử được phép:
Object[] oa = arr;
oa[0] = List.of(1, 2); // đáng lẽ ArrayStoreException nhưng lọt
String s = arr[0].get(0); // ClassCastException ngầm sau nàyGiải pháp: dùng List<T> thay array (List<List<String>>); hoặc khi buộc phải có array, tạo Object[] rồi ép (T[]) và cô lập cảnh báo bằng @SuppressWarnings("unchecked") — chính cách ArrayList làm bên trong.