4

JavaまたはGroovyでは、次のような文字列配列があるとします。

myArray = ["SA1", "SA2", "SA3", "SA4"]

各文字列に基づいて異なる関数を呼び出したい。

class Myclass{
  public static void SA1() {
    //doMyStuff
  }
  public static void SA2() {
    //doMyStuff
  }
  ...etc
}

文字列を比較したりcaseステートメントを作成したりせずに、配列をループして関連する関数を呼び出せるようにしたいと思います。たとえば、次のようなことを行う方法はありますが、現在は機能しないことがわかっています。

Myclass[myArray[0]]();

または、別の方法の提案がある場合は、同様の構造を作成できます。

4

4 に答える 4

3

groovyでは、次のことができます。

Myclass.(myArray[0])()

Javaでは、次のことができます。

MyClass.class.getMethod(myArray[0]).invoke(null);
于 2012-12-24T16:06:41.173 に答える
3

Groovyでは、動的メソッド呼び出しにGStringを使用できます。

myArray.each {
  println Myclass."$it"()
}
于 2012-12-24T17:15:22.097 に答える
2

たとえば、次のようなインターフェイスを宣言できます。

public interface Processor
{
    void process(String arg);
}

次に、このインターフェースを、たとえばシングルトンで実装します。

次にMap<String, Processor>、キーが文字列であり、値が実装であり、呼び出し時に次の場所を作成します。

Processor p = theMap.containsKey(theString)
    ? theMap.get(theString)
    : defaultProcessor;

p.process(theString);
于 2012-12-24T16:01:41.640 に答える
0

実行時にメソッドを呼び出すには、ReflectionAPIを確認することをお勧めします。Reflectionドキュメントを確認してください

Class cl = Class.forName("/* your class */");
Object obj = cl.newInstance();

//call each method from the loop
Method method = cl.getDeclaredMethod("/* methodName */", params);
method.invoke(obj, null);
于 2012-12-24T16:03:19.703 に答える