如何运行外部类的所有方法

时间:2013-09-26 10:30:33

标签: java reflection

我有一个“RSTRule”类,它有几个方法,所有方法都以“generate”开头。 在另一个类“RSTRules”中,我想在“RSTRule”中执行所有方法,并在其构造函数中使用for循环。我编写了以下代码,但我不知道如何执行这些方法以及如何调用它们?

public class RSTRules extends ArrayList<RSTRule>  {

public RSTRules(){
    Class<?> rstRule = Class.forName("RSTRule");
    Method[] methods = rstRule.getMethods();
        for (Method m : methods) {
           if (m.getName().startsWith("generate")) {
            //Run the method m 
           }
        }

}

这也是“RSTRule”类的方法

public RSTRule generateBothNotSatisfy_Join(){
        this.discourseRelation=DiscourseRelation.Join;
        this.nucleus=new NucleusSatelliteInRSTRule("Both_Not_Satisfy_User_Desires_in",propNuc);
        this.satellite=new NucleusSatelliteInRSTRule("Both_Not_Satisfy_User_Desires_in",propSat);
        this.ruleName="BothNotSatisfy_Join";
        this.condition=null;
        this.heuristic=10;
        return this;
    }

2 个答案:

答案 0 :(得分:0)

Class是Java中的metaClass(描述其他类的类)。所以你不能在它上面调用方法。要调用方法,您需要生成要调用方法的类的实例。

这是一个小小的通用示例:

    Method[] methods = Object.class.getMethods();
    Object o = new Object();
    for (Method method : methods) {
        method.invoke(o, {params for method});
    }

Invoke方法有两个参数。第一个是您要调用方法的实例,第二个是方法的参数。 (如果方法不采取任何方法,则为null)

答案 1 :(得分:0)

public RSTRules(){
    Class<?> rstRule = Class.forName("RSTRule");
    Method[] methods = rstRule.getMethods();
        for (Method m : methods) {
           if (m.getName().startsWith(" generate")) {
                method.invoke(rstRule, {params for method}); 
           }
        }

}

详情请参阅以下链接

http://tutorials.jenkov.com/java-reflection/index.html