从一个字符串数组调用一个函数(爪哇或Groovy)(Call a function from a s

2019-08-04 15:18发布

在Java中,或Groovy,说我有一个字符串数组一样

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

我想打电话给基于关闭各个弦的不同的功能。

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

我希望能够遍历我的数组并调用它们涉及到的功能,而无需比较字符串或做一个case语句。 例如,有没有办法做到像下面这样,我知道这并不目前的工作:

Myclass[myArray[0]]();

或者,如果你有另一种方式我可以构建类似的建议。

Answer 1:

在Groovy中,你可以这样做:

Myclass.(myArray[0])()

在Java中,你可以这样做:

MyClass.class.getMethod(myArray[0]).invoke(null);


Answer 2:

在Groovy中,你可以使用动态方法调用一个的GString:

myArray.each {
  println Myclass."$it"()
}


Answer 3:

你可以,例如,声明的接口,如:

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

那么实现这个接口,例如单身。

然后创建一个Map<String, Processor>键进行你的字符串,值是实现方式,并且调用时:

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

p.process(theString);


Answer 4:

我建议你看一下思考的API调用在运行时检查方法的反思文档

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);


文章来源: Call a function from a string array (Java or Groovy)