关于Android反射操作的相关代码详解

调用类私有方法获得返回值

1 class TestReflect {
2     private String writeTest() {
3         return "aabbcc";
4     }
5 }

通过反射方式获取私有方法并返回数据

 1         try {
 2             TestReflect test = new TestReflect();//实例化类对象
 3             Class clazz = test.getClass();//获取实例对象类加载器
 4             Method method = clazz.getDeclaredMethod("writeTest");//获取私有方法
 5             method.setAccessible(true);
 6             Object result = method.invoke(test, null);
 7             Log.d("TAG", "反射返回内容:" + result);
 8         } catch (NoSuchMethodException e) {
 9             e.printStackTrace();
10         } catch (IllegalAccessException e) {
11             e.printStackTrace();
12         } catch (InvocationTargetException e) {
13             e.printStackTrace();
14         }

以上代码通过实例化对象取得的类加载器,下面我们使用包+类名方式同样可以获取类实例化对象

1 //获取object实例,即AppInfo实例,这里会调用无参构造方法
2       Class<?> clazz= Class.forName("com.xxx.xxx.bean.AppInfo");
3        Object obj = clazz.newInstance();
1 clazz.getDeclaredField()//获取私有字段
2 clazz.getDeclaredMethod()//获取私有方法
3 clazz.getMethod()//获取公开方法
4 clazz.getField()//获取公开字段

下面是带有参数的方法传递及参数赋值

目标类

1 class TestReflect {
2     private String writeTest(String a) {
3         return "aabbcc" + a;
4     }
5 }

反射代码

 1       try {
 2             TestReflect test = new TestReflect();//实例化类对象
 3             Class clazz = test.getClass();//获取实例对象类加载器
 4             Method method = clazz.getDeclaredMethod("writeTest",String.class);//获取私有方法
 5             method.setAccessible(true);
 6             Object result = method.invoke(test, "传递文本型参数");
 7             Log.d("TAG", "反射返回内容:" + result);
 8 
 9         } catch (NoSuchMethodException e) {
10             e.printStackTrace();
11         } catch (IllegalAccessException e) {
12             e.printStackTrace();
13         } catch (InvocationTargetException e) {
14             e.printStackTrace();
15         }

猜你喜欢

转载自www.cnblogs.com/ugvnui/p/12909135.html
今日推荐