Android 反射获取私有方法,成员变量
16lz
2021-01-23
public class AppInfo { private String mAppName;public String getAppName() { return mAppName; } public void setAppName(String appName) { this.mAppName = appName; }}
获取方法
public static void test() { try { ////获取class 实例 Class<?> clz = Class.forName("com.xxx.xxx.bean.AppInfo"); //获取object实例,即AppInfo实例,这里会调用无参构造方法 Object obj = clz.newInstance(); //调用方法setAppName,传入String 类型的参数 Method mothod1 = clz.getMethod("setAppName",String.class); //执行该方法,实参为"hhhhh",obj为要操作的对象 mothod1.invoke(obj,"hhhhh"); //调用getAppName 方法,不需要传参 Method mothod = clz.getMethod("getAppName"); //在obj对象中,执行该方法 String name = (String) mothod.invoke(obj); } catch (Exception e) { e.printStackTrace(); } }
获取成员变量
public void getField(Object obj) { Class<?> class1 = obj.getClass(); Field[] fields = class1.getDeclaredFields();//获取全部成员变量 Field[] fields = class1.getDeclaredFields(); for( Field field : fields ){ Log.i("test", "name==" + field.getName());//依次获取成员变量名 } Field field = class1.getDeclaredField("lottieDrawable");//获取变量名为lottieDrawable 的变量 field.setAccessible(true);//开放权限 LottieDrawable drawable = (LottieDrawable) field.get(obj);//从对象中获取该成员变量值 //field.getInt(obj),field.getBoolean(obj).... }
更多相关文章
- Android Gridview 禁止滚动的二种方法
- android反射方式访问内部类成员
- Android 去掉title bar的3个方法
- android抓取各种log的方法
- android 捕获返回(后退)按钮事件的两种方法
- ubuntu 不是 识别 android 设备 解决方法
- Android EditText中添加图标的简单方法