关于Android反射操作的相关代码详解
Posted ugvnui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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 }
以上是关于关于Android反射操作的相关代码详解的主要内容,如果未能解决你的问题,请参考以下文章