Java面试题:如何通过反射获取和设置对象私有字段的值?
2021-04-20 00:27
阅读:948
可以通过类对象的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/essay/76886.html
文章标题:Java面试题:如何通过反射获取和设置对象私有字段的值?
文章链接:http://soscw.com/essay/76886.html
评论
亲,登录后才可以留言!