Java反射,获取方法并使用它

时间:2012-01-26 11:34:03

标签: java reflection

我写了一个程序,它必须要求使用Method(我使用java.lang.StringBuffer.append)然后它必须说明它需要多少个参数,在这种情况下我认为这是3。用户可以输入他想要所有字符串的参数,然后程序追加它们并打印出字符串。但是有一些问题,我只是没有找到错误。

import java.lang.reflect.*;

import tio.*;
public class MethodExecutor {
    public static void main(String [] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException
    {
        String input = "";
        String input1 = "";
        String input2 = "";
        String argumenten[];
        int aantal = 0;
        System.out.println("What method to invoke?");
        input = Console.in.readLine();

        input1 = input.substring(0,input.lastIndexOf("."));
        input2 = input.substring(input.lastIndexOf(".")+1,input.length());
        System.out.println(input2);

        Class<?> c = Class.forName(input1);
        Method m = c.getMethod(input2, null);
        Class<?>[] parameterTypes = m.getParameterTypes();

        System.out.println("Needs max " + parameterTypes.length + " parameters.");
        System.out.println("How many will you provide?");
        aantal = Console.in.readInt();
        argumenten = new String[aantal];
        for(int i = 0; i < argumenten.length; i++)
            argumenten[i] = Console.in.readLine();

        System.out.println("Success");

        }
}

Tio只是一个获取控制台输入的库。

有人可以帮忙吗?

亲切的问候,

1 个答案:

答案 0 :(得分:2)

我认为这......

Method m = c.getMethod(input2, null);

...将寻找一个名称存储在input2中的方法,该方法不带参数。

相反,我认为您需要在类上搜索EVERY方法,然后打印出匹配名称的方法的长度

(来自getMethod的javadoc:)

  

返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定公共成员方法。 name参数是一个String,指定所需方法的简单名称。 parameterTypes参数是一个Class对象数组,它按声明的顺序标识方法的形式参数类型。   如果parameterTypes为null,则将其视为空数组。