通过反射调用类中的指定方法
调用指定方法
通过反射,调用类中的方法,通过 Method 类完成。步骤如下:
Class cla = Class.forName("com.aze.reflection.Student");
通过 Class 类的 getMethod(String name,Class … parameterTypes) 方法取得一个 Method 对象,并设置此方法操作时所需的参数类型。
// 得到名为 showInfo,参数为 String,String 的公有方法 Method mc = cla.getMethod("showInfo", String.class, String.class);
之后使用 Object invoke(Object obj,Object[] args) 进行调用,并向方法中传递要设置的 obj 对象的参数信息。
//指定获取一个参数为 String,String 类型的公有有参构造方法 Constructor con = cla.getConstructor(); // 实例化对象 Student s = (Student) con.newInstance(); // 参数一是需要实例化的对象,后面的参数是调用当前的方法的实际参数 mc.invoke(s,"张三","一中");
调用公有的有参方法
Class cla = Class.forName("com.aze.reflection.Student");
// 得到名为 showInfo,参数为 String,String 的公有方法
Method mc = cla.getMethod("showInfo", String.class, String.class);
//指定获取一个参数为 String,String 类型的公有有参构造方法
Constructor con = cla.getConstructor();
// 实例化对象
Student s = (Student) con.newInstance();
// 参数一是需要实例化的对象,后面的参数是调用当前的方法的实际参数
mc.invoke(s,"张三","一中");
调用私有的有参方法
- 注意要解除封装,强制调用私有。
// 得到名为 showInfo,参数为 String 的所有方法
Method mc = cla.getDeclaredMethod("test1", String.class);
//指定获取一个公有有参构造方法
Constructor con = cla.getConstructor();
// 实例化对象
Student s = (Student) con.newInstance();
// 解除私有封装,强制调用私有
mc.setAccessible(true);
// 参数一是需要实例化的对象,后面的参数是调用当前的方法的实际参数
mc.invoke(s,"张三");
调用公有的重载方法
Class cla = Class.forName("com.aze.reflection.Student");
// 调取一个重载方法
Method met = cla.getMethod("showInfo",int.class);
Constructor con = cla.getConstructor();
Student stu = (Student) con.newInstance();
met.invoke(stu,18);
调用公有的有返回值的方法
Class cla = Class.forName("com.aze.reflection.Student");
//指定获取一个公有有参构造方法
Constructor con = cla.getConstructor();
// 实例化对象
Student s = (Student) con.newInstance();
// 调取有返回值的方法
Method met = cla.getMethod("test2");//获取方法名为 test2,且没有参数的公有方法
String sch = (String) met.invoke(s);
System.out.println(sch);
版权声明:本文为qq_34172440原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。