嘗試直接將 Set<Byte[]> 或 List<String> 轉為具體型別陣列(如 byte[][]、String[])時,若呼叫無參數 toArray() 會得到 Object[],強制轉型拋出 ClassCastException。
// 正確:傳入「目標型別、長度為 0」的陣列
String[] strArray = stringList.toArray(new String[0]);
// 亦可傳入預估大小陣列(避免擴容),Java 11+ 建議用 0 長度
Byte[][] byteArrays = byteSet.toArray(new Byte[0][]);
toArray(T[] a):若傳入陣列長度足夠,直接填入並返回該陣列;否則以 Arrays.copyOf 建立新陣列返回。new String[0] 可讓 JVM 精確推導元件型別,產生最緊湊陣列,效能最佳(JIT 會優化配置)。Java 集合無法直接儲存基本型別(int、byte 等),需用 Stream API 或第三方庫:
// List → int[]
int[] primitive = list.stream().mapToInt(Integer::intValue).toArray();
// Set → byte[] (Guava)
byte[] bytes = Bytes.toArray(byteSet);
toArray,優先使用集合迭代或 Stream 處理。new T[size] 可減少一次複製。Arrays.copyOf 或 System.arraycopy 手動控制。