大家好,这里是IT技术百货,专注于有价值的IT技术知识分享;
今天跟大家分享一个可以非常方便获取对象私有属性的工具类
背景
今天开发测试代码时,需要获取对象的私有成员变量,但是觉得将权限改成public,测试完之后再改回去比较费事,况且改回去之后测试代码的编译也会有问题,还得注释掉,非常不优雅;
解决方案
之前了解到有一些测试框架可以完成这个功能,并且在之前的一个项目中也用过这个特性。
但是由于不是经常使用那个测试框架,而且为了使用一个小特性而引入一个复杂的模块,感觉也不值当,所以最终选择利用反射获取私有成员变量,代码如下:
<code>import java.lang.reflect.Field; public class ReflectUtil { public static Object filedValue(Object obj, String filedName) throws NoSuchFieldException, IllegalAccessException { Class objClass = obj.getClass(); Field field = objClass.getDeclaredField(filedName); field.setAccessible(true); return field.get(obj); } public static Object filedValue(Class obj, String filedName) throws NoSuchFieldException, IllegalAccessException { Field field = obj.getDeclaredField(filedName); field.setAccessible(true); return field.get(obj); } public static void main(String[] args) throws Exception { String staticS = (String) filedValue(AccessTest.class, "staticVar"); System.out.println(staticS); String s = (String) filedValue(new AccessTest(), "var"); System.out.println(s); } } class AccessTest { private static String staticVar = "private static staticVar"; private String var = "general var"; }/<code>
简单易用;
感谢浏览阅读,如果觉得内容有价值欢迎点赞,收藏,转发;喜欢请关注“IT技术百货”