A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

之前在sinablog写的东西。在使用反射可以得到类模板class对象,那么得到类模板的class对象后,如何调用某个已知的且需要的方法呢?答案是使用method类的invoke方法,那么实现的代码如下,结合jdk的api和该代码便可以知道原理
  代码
  package methodinvoke;
  import java.lang.reflect.Method;
  public class Test {
  public String function () {
  return "调用function";
  }
  @SuppressWarnings("unchecked")
  public static void main(String[] args) {
  try {
  //利用forname反射方式得到某个类的class对象,即类模板
  Class c = Class.forName("methodinvoke.Test");
  //由类模板得到该类的实体
  Test t = (Test) c.newInstance();
  System.out.println("------------------------对象");
  //打印类模板的name
  System.out.println("//class.getname");
  System.out.println(c.getName());
  //打印类模板所对应的对象的name
  System.out.println("//obj.tostring");
  System.out.println(t);
  System.out.println("------------------------方法");
  //得到某方法实体对应的class模板对象的name
  System.out.println("//method.class.getname");
  System.out.println(c.getMethod("function", null).getClass().getName());
  System.out.println("//method.getname");
  //得到某方法实体的name
  System.out.println(c.getMethod("function", null).getName());
  System.out.println("//调用方法");
  //调用t引用所指向的对象的某方法
  System.out.println(c.getMethod("function", null).invoke(t, null));
  System.out.println("------------------------遍历对象的方法");
  Method[] methods = c.getMethods();
  //遍历得到某个类模板中的方法实体
  for (int i = 0;i < methods.length;i++) {
  //方法实体的class模板对象的name
  System.out.println(methods[i].getClass().getName());
  //方法实体的name
  System.out.println(methods[i].getName());
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
  }

2 个回复

倒序浏览
看着有点晕。建议用颜色区分
回复 使用道具 举报
在发帖中有个叫<>code的工具 这样的代码好看点
  1. 就是这个.....
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马