首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 反射操作陣列:Array.getLength 與 Array.get 通用取值指南

     編輯:Java 相關知識

反射 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):動態建立陣列實例。

應用場景

  • 框架開發:通用處理方法參數/回傳值可能為陣列的情況(如 MyBatis TypeHandler、Spring ConversionService)。
  • 序列化/反序列化:無需針對每種陣列型別寫死邏輯。
  • 測試工具:動態驗證陣列內容。

效能提示

反射操作陣列比直接存取慢 10-100 倍。熱路徑建議:if (array instanceof int[]) { ... } 型別專用化,或用 MethodHandle/VarHandle (Java 9+) 加速。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved