2

我有一个类“RSTRule”,它有几个方法,所有方法都以“生成”开头。在另一个类“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;
    }
4

2 回答 2

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)

于 2013-09-26T10:38:41.970 回答
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

于 2013-09-26T10:40:56.877 回答