如何根据字符串来调用对应的函数?比如//定义函数
private void sub1(){...}
private void sub2(){...}
private void sub3(){...}
....................
private void subN(){...}///////////////////////////////////
//用来存储函数的名称
ArrayList sublist = new ArrayList();
sublist.add("sub1");
sublist.add("sub2");
sublist.add("sub3");
sublist.add("sub4");
.............
sublist.add("subN");..................//////////////////////////////////String subname = sublist.get(i); //取出一个函数名请问如何根据取出的subname来调用对应的函数呢

解决方案 »

  1.   

    看看反射的api就能找到方法了
      

  2.   

    java的反射机制 java.lang.reflect 
      

  3.   


    Class<Test> classType = Test.class;
    Object o = classType.newInstance();
    for (int i = 0; i < sublist.size(); i++) {
    String subname = sublist.get(i); //取出一个函数名
    Method method = classType.getMethod(subname,null);
    method.invoke(o, null);
    }
    ps:你定义的函数不应该是private的,否则无法访问了
    程序中2处null可以用空数组代替,因为你的方法没有参数,如果有参数,根据类型给定数组就可以
      

  4.   


    这里的
    Method method = classType.getMethod(subname,null);
    null是指给函数传参的吗
      

  5.   

    是的,正常情况应该是个new Class[]{......}数组,省略号部分根据类型给定值
    比如你是一个int,一个String参数 classType.getMethod(subname,new Class[] { int.class,  String.class }); 
    然后下面调用时候   
     method.invoke(o, new Object[] {1, "hello"});当然如果你需要函数的返回值invoke函数会把返回值传回来,你只要在左边用object接收就可以
    如:Object returnType = method.invoke(o, new Object[] {1, "hello"});