向arraylist添加方法并动态调用方法

时间:2014-05-27 13:07:30

标签: java java-ee selenium-webdriver

我已将方法添加到arraylist并尝试在main中调用方法(ui.mList.get(0)参见代码示例1)来执行但java不执行任何方法。但是,我发现其他示例代码执行方法如下所示(参见代码示例2),但是当我运行代码系统时显示异常

代码示例1:

class UserLogin{
List<String> mList = new ArrayList();

public void testAnswerCorrect(){
//My code
}

public void listMethodsUsingReflection(){
Class personClass = UserLogin.class;
Method[] methods = personClass.getDeclaredMethods();
int i=0;
        for (Method method : methods) {
            if(method.getName().toString().contains("test")){
            mList.add(i,method.getName());
            i++;
            }
        }

}

public static main(String arg[]){

    UserLogin ul = new UserLogin();
    ul.listMethodsUsingReflection();
    ul.mList.get(0);
}

在代码上运行不会做任何事情。

示例代码2

            Object obj = null;
    UserLogin ul = new UserLogin();
    ul.listMethodsUsingReflection();
    String className = "com.test.script.UserLogin";
    Class c = Class.forName(className);
    obj = c.newInstance();
    Class[] argTypes = new Class[] { String[].class };
    String sMethod =ul.mList.get(0).toString();
    Method method = c.getDeclaredMethod(sMethod, argTypes);
    method.invoke(obj, null);

在代码系统上运行会产生异常:

Exception in thread "main" java.lang.NoSuchMethodException:com.test.script.UserLogin.testAnswerCorrect([Ljava.lang.String;)
at java.lang.Class.getDeclaredMethod(Unknown Source)
at com.test.script.UserLogin.main(UserLogin.java:180)

缺少某些东西或者还有其他方法可以执行方法。另外,我将在数组列表中添加所有方法,这些方法将从xml文件中读取并需要动态执行代码。用户在编写测试脚本/代码时将给出方法名称。

我很感激您的意见

谢谢,

2 个答案:

答案 0 :(得分:1)

对于这个例子,我假设你有     列表methodList;

在methodNames中已满。(此方法不带参数

for (int i = 0 ; i < methodNames.size() ; i++) {
   Class cls = UserLogin.class;
   Method method = cls.getDeclaredMethod(methodNames.get(i));
   Object returnObject = method.invoke(c.newInstance(), new Object[]{});
}

它应该是那样的东西.AS你可以看到,Get声明的方法不应该像你写的那样使用String []。你的方法没有得到anyParameter ..所以无法找到,因为你定义了使用参数String []获取方法 首先,你得到你的特定方法的类,然后你通过她的名字的字符串创建方法,比你需要调用你的方法并获得返回对象..如果你有参数你需要填补新的

Object[]{}

希望有所帮助

答案 1 :(得分:0)

testAnswerCorrect()方法不带任何参数,而您反复尝试访问方法testAnswerCorrect(String[])。如果你改变了行

Class[] argTypes = new Class[] {String[].class};

Class[] argTypes = new Class[0];

然后它应该工作。请注意,testAnswerCorrect()testAnswerCorrect(String[])被视为不同的方法。您试图获取采用String[]的方法,并且该方法不存在。

或者,你可以得到这样的方法:

Method method = c.getDeclaredMethod(sMethod);

然后您根本不必创建Class[]