Java中必须用java.lang.reflect.Array.get/set操作数组元素,因数组无getter/setter方法,下标访问需编译期类型已知;get返回Object(基本类型自动装箱),set要求value与元素类型兼容,多维数组需嵌套调用。

Java 中 java.lang.reflect.Array.get 和 Array.set 是反射操作数组元素的唯一标准方式,适用于所有类型数组(包括基本类型和引用类型),无需强制转换、不依赖泛型,且能绕过编译期类型检查。
为什么不能用普通 get/set 方法?
数组在 Java 中是特殊对象,没有 public 的 getter/setter 方法,也不能像 List 那样调用 get(i)。直接通过下标访问(如 arr[i])又要求编译期已知数组类型和维度 —— 反射场景下这通常不满足。所以必须使用 Array 工具类提供的静态方法。
get 方法:安全读取任意类型数组元素
Array.get(Object array, int index) 返回 Object 类型值。对基本类型数组(如 int[]),它会自动装箱(返回 Integer);对引用类型数组(如 String[]),直接返回对应引用(可能为 null)。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 第一个参数必须是数组实例(不能是
Class或null,否则抛IllegalArgumentException) - 索引越界会抛
IndexOutOfBoundsException - 示例:
int[] nums = {10, 20};<br>Object val = Array.get(nums, 1); // 返回 Integer(20)
若需原始值,可强转后调用xxxValue()(如((Integer)val).intValue())
set 方法:写入时注意类型匹配
Array.set(Object array, int index, Object value) 要求传入的 value 与数组元素类型兼容:
立即学习“Java免费学习笔记(深入)”;
- 对基本类型数组,
value必须是对应包装类实例(如向double[]写入需传Double),或null(仅当目标是引用类型) - 若类型不匹配(如向
int[]传String),运行时抛IllegalArgumentException - 示例:
String[] strs = new String[1];<br>Array.set(strs, 0, "hello"); // ✅<br>Array.set(strs, 0, null); // ✅<br>Array.set(strs, 0, 123); // ❌ IllegalArgumentException
多维数组怎么处理?
Array.get 和 Array.set 只支持一维访问。对多维数组(如 int[][]),需嵌套调用:
- 读取
matrix[1][2]:Object row = Array.get(matrix, 1); // 得到 int[]<br>int val = Array.getInt(row, 2); // 注意:用 getInt 等专用方法更高效
- 推荐对基本类型优先用
Array.getInt、Array.getDouble等专用方法 —— 避免装箱开销,且不接受null,类型更严格


















