如何通过反射遍历Person数组并调用类中定义的指定方法
实现代码
你可以用JDK自带的java.lang.reflect.Array工具类操作反射获取到的数组对象,完整逻辑如下:
import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; // 你的原有逻辑保持不变 Class<?> mainClass = cl.loadClass("com.client.Client"); Class<?> peopleClass = cl.loadClass("com.api.Person"); Field allPersons = mainClass.getDeclaredField("peoples"); allPersons.setAccessible(true); // 注意:如果peoples是实例非静态字段,这里get方法的入参要传Client的实例对象,传mainClass仅对静态字段生效 Object obj = allPersons.get(mainClass); Method methodgetAge = peopleClass.getDeclaredMethod("getAge"); Method methodsetAge = peopleClass.getDeclaredMethod("setAge", int.class); // 新增遍历调用逻辑 if (obj != null && obj.getClass().isArray()) { int arrLen = Array.getLength(obj); for (int i = 0; i < arrLen; i++) { Object personItem = Array.get(obj, i); if (personItem == null) { continue; } // 调用getAge方法获取年龄 int age = (int) methodgetAge.invoke(personItem); // 拿到age后可自行处理,以下是修改年龄的示例 // methodsetAge.invoke(personItem, age + 2); System.out.printf("索引%d的Person年龄为:%d%n", i, age); } }
注意事项
- 不要直接把
obj强转为Person[],如果加载Client和Person的类加载器不统一,会直接抛出ClassCastException,用Array工具类是兼容所有场景的方案 - 调用反射方法时建议自行捕获
IllegalAccessException、InvocationTargetException两类异常做兜底处理
内容的提问来源于stack exchange,提问作者asdasd31
相关产品推荐
相关产品推荐

