Android(安卓)反射获取私有方法,成员变量
16lz
2022-04-24
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中设置全屏的方法
- android 获取包名 通过包名获取应用签名
- android webview模拟网页post操作
- Android中音频文件的使用
- [置顶] android调用.net的webservice的例子获取手机的归属地
- Android(安卓)Gridview 禁止滚动的二种方法
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用
- python list.sort()根据多个关键字排序的方法实现