- 这里的反射只是一个简单的操作,方便自己以后小看一下
- 操作前 ,首先要有这个类的源码在文件中,因为这个类的方法可能是@hide(隐藏)的,所以不能直接获得,需要用反射来获得。
- 直接代码…
- 这是想要用到该类的方法
public class Infos {
public String getNum(String num ){
return num ;
}
}
- 然后就是如何使用反射
public void useReflect(){
//首先得到对象;后面会使用到
Infos infos = new Infos();
//反射操作
Class<?> loadClass ;
try {
//参数是想要获取的全类名!
loadClass = Infos.class.getClassLoader().loadClass("com.xingao.jsontest.Infos");
// 第一参数方法名, 第二个之后都是参数类型.class ,参数类型是什么就是什么.class!有几个写几个
//获取的方法必须是public的方法
Method method = loadClass.getMethod("getNum", String.class);
//这是直接得到所有方法,然后可以遍历等操作
//Method[] methods = loadClass.getMethods();
// for (Method md: methods) {
// Log.d("方法", md.toString());
Object invoke = method.invoke(infos, "66666");
//第一参数 ,类的实例 ,方法不是静态的就必须指定!!!
//第二后面的参数就是 想要得到的方法的内的依次参数需要输入的内容
//上面的方法等同于String num = infos.getNum("66666");
//当然也可以是没有返回值的操作。
Log.d("**-/-/-/-/-/-/" , invoke.toString());
//log:**-/-/-/-/-/-/ 666666
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}