Java面试题:如何通过反射获取和设置对象私有字段的值?
2021-04-20 00:27
阅读:758
可以通过类对象的getDeclaredField()方法字段(Field)对象,然后再通过字段对象的setAccessible(true)将其设置为可以访问,接下来就可以通过get/set方法来获取/设置字段的值了。下面的代码实现了一个反射的工具类,其中的两个静态方法分别用于获取和设置私有字段的值,字段可以是基本类型也可以是对象类型且支持多级对象操作,例如ReflectionUtil.get(dog, "owner.car.engine.id");可以获得dog对象的主人的汽车的引擎的ID号。
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; /** * 反射工具类 * * */ public class ReflectionUtil { private ReflectionUtil() { throw new AssertionError(); } /** * 通过反射取对象指定字段(属性)的值 * @param target 目标对象 * @param fieldName 字段的名字 * @throws 如果取不到对象指定字段的值则抛出异常 * @return 字段的值 */ public static Object getValue(Object target, String fieldName) { Class> clazz = target.getClass(); String[] fs = fieldName.split("\\."); try { for(int i = 0; i clazz = target.getClass(); String[] fs = fieldName.split("\\."); try { for(int i = 0; i c = f.getType().getDeclaredConstructor(); c.setAccessible(true); val = c.newInstance(); f.set(target, val); } target = val; clazz = target.getClass(); } Field f = clazz.getDeclaredField(fs[fs.length - 1]); f.setAccessible(true); f.set(target, value); } catch (Exception e) { throw new RuntimeException(e); } } }
文章来自:搜素材网的编程语言模块,转载请注明文章出处。
文章标题:Java面试题:如何通过反射获取和设置对象私有字段的值?
文章链接:http://soscw.com/index.php/essay/76886.html
文章标题:Java面试题:如何通过反射获取和设置对象私有字段的值?
文章链接:http://soscw.com/index.php/essay/76886.html
评论
亲,登录后才可以留言!