2

クラス「RSTRule」にはいくつかのメソッドがあり、すべてのメソッドは「generate」で始まります。別のクラス「RSTRules」では、コンストラクターに for ループを使用して「RSTRule」のすべてのメソッドを実行したいと考えています。次のコードを書きましたが、これらのメソッドを実行する方法と呼び出す方法がわかりません。

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
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 に答える
0

クラスは Java の metaClass (他のクラスを記述したクラス) です。そのため、メソッドを呼び出すことはできません。メソッドを呼び出すには、メソッドを呼び出すクラスの生きているインスタンスが必要です。

次に、少し一般的な例を示します。

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

Invoke メソッドは 2 つのパラメーターを取ります。1 つ目はメソッドを呼び出すインスタンスで、2 つ目はメソッドのパラメーターです。(メソッドが何も取らない場合は null)

于 2013-09-26T10:38:41.970 に答える