利用反射擴展數組長度 思想:要擴展數組長度其實就是產生一個新的數組覆蓋舊的數組 備註: ...
利用反射擴展數組長度
思想:要擴展數組長度其實就是產生一個新的數組覆蓋舊的數組
import java.lang.reflect.*; public class Answer { public static void main(String[] args) { Test test = new Test(); test.print(); //列印數組的內容 test.is = (int[]) addArrayLength(test.is, 10); //用新的數組覆蓋舊的數組 test.ss = (String[]) addArrayLength(test.ss, 10); test.print(); } public static Object addArrayLength(Object array, int newLength) { Object newArray = null; Class componentType = array.getClass().getComponentType(); //得到一個數組的class對象 newArray = Array.newInstance(componentType, newLength); //動態創建數組 System.arraycopy(array, 0, newArray, 0, Array.getLength(array)); //數組之間的複製 return newArray; } } class Test { public int[] is = { 1, 2, 3 }; public String[] ss = { "A", "B", "C" }; public void print() { for (int index = 0; index < is.length; index++) { System.out.println("is[" + index + "]=" + is[index]); } System.out.println(); for (int index = 0; index < ss.length; index++) { System.out.println("ss[" + index + "]=" + ss[index]); } System.out.println(); } }
備註:
array.getClass().getComponentType() 得到一個數組的class對象
Array.newInstance(componentType, newLength) 動態創建指定類型的數組
System.arraycopy(array, 0, newArray, 0, Array.getLength(array)) 實現數組之間的複製,這五個參數分別代表被覆制的數組,起始位置,複製到的數組,起始位置,長度