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

Java 陣列反射完整指南:動態操作陣列的核心技術

     編輯:Java 相關知識

反射與內省的區別

  • 內省:運行時檢測物件類型與屬性(如 instanceof)。
  • 反射:運行時檢測並修改物件結構與行為(如 Class.forName()、Method.invoke())。
  • 內省是反射的子集;Java 反射實質上更接近內省,因無法改變物件結構,僅能調整可見性。

為何需要陣列反射?

Java 基本型別陣列(如 int[])無法直接轉型為 Object[],只能視為 Object。這導致通用處理陣列(如列印、轉 List)變得困難。陣列反射(java.lang.reflect.Array)提供統一 API,支援任意型別、任意維度陣列的動態建立、存取與遍歷。

核心 API 操作示範

1. 判斷是否為陣列並遍歷

int[] data = {58, 55, 93, 61, 61, 29, 68, 0, 22, 7};
Object obj = data; // 向上轉型
if (obj.getClass().isArray()) {
    int len = Array.getLength(obj);
    for (int i = 0; i < len; i++) {
        int value = Array.getInt(obj, i); // 取得基本型別值
        System.out.print(value + " ");
    }
}

2. 動態建立陣列

// 一維陣列:相當於 new int[20]
Object arr1 = Array.newInstance(int.class, 20);
// 二維陣列:相當於 new int[10][8]
Object arr2 = Array.newInstance(int.class, 10, 8);

實用工具類:通用陣列列印與轉 List

Print 工具類

支援基本型別與物件陣列、多維陣列、空陣列、含 null 陣列的格式化列印,可輸出至 Console、檔案或字串。

CollectionUtils 工具類

提供 asList(Object) 方法,利用反射將陣列、Iterator、Enumeration、Map、Iterable 統一轉換為 List<?>,解決 Arrays.asList() 無法處理基本型別陣列的缺陷。

總結

陣列反射為處理不確定型別陣列提供極大靈活性,但犧牲效能。實務開發中應視需求權衡:通用框架、工具庫開發適合使用;效能敏感的業務邏輯建議優先使用強型別直接操作。

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