反射 API 中 java.lang.reflect.Array 提供統一介面操作任意型別陣列(基本型別與物件陣列)。當方法回傳 Object 可能是陣列時,可用 obj.getClass().isArray() 判斷,再用 Array.getLength/Array.get 遍歷。
import java.lang.reflect.Array;
public class ArrayReflectDemo {
public static void main(String[] args) {
String[] strs = {"a", "b", "c"};
Object obj = strs; // 向上轉型為 Object
if (obj.getClass().isArray()) {
int len = Array.getLength(obj);
System.out.println("陣列長度: " + len);
for (int i = 0; i < len; i++) {
Object element = Array.get(obj, i);
System.out.println("[" + i + "] = " + element);
}
}
// 基本型別陣列同樣適用
int[] nums = {10, 20, 30};
printArray(nums); // 輸出: 10 20 30
}
static void printArray(Object array) {
if (!array.getClass().isArray()) {
System.out.println("非陣列物件: " + array);
return;
}
int len = Array.getLength(array);
for (int i = 0; i < len; i++) {
System.out.print(Array.get(array, i) + " ");
}
System.out.println();
}
}
Array.getLength(Object array):回傳陣列長度,等同 array.length 但適用於 Object 參考。Array.get(Object array, int index):回傳 Object,基本型別自動裝箱(int→Integer 等)。Array.set(Object array, int index, Object value):設置元素,需型別匹配(基本型別需傳入對應 Wrapper)。Array.newInstance(Class> componentType, int length):動態建立陣列實例。反射操作陣列比直接存取慢 10-100 倍。熱路徑建議:if (array instanceof int[]) { ... } 型別專用化,或用 MethodHandle/VarHandle (Java 9+) 加速。