【我的开源】获取对象私有属性的工具类

大家好,这里是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技术百货”


分享到:


相關文章: