在Java中,或Groovy,说我有一个字符串数组一样
myArray = ["SA1", "SA2", "SA3", "SA4"]
我想打电话给基于关闭各个弦的不同的功能。
class Myclass{
public static void SA1() {
//doMyStuff
}
public static void SA2() {
//doMyStuff
}
...etc
}
我希望能够遍历我的数组并调用它们涉及到的功能,而无需比较字符串或做一个case语句。 例如,有没有办法做到像下面这样,我知道这并不目前的工作:
Myclass[myArray[0]]();
或者,如果你有另一种方式我可以构建类似的建议。
在Groovy中,你可以这样做:
Myclass.(myArray[0])()
在Java中,你可以这样做:
MyClass.class.getMethod(myArray[0]).invoke(null);
在Groovy中,你可以使用动态方法调用一个的GString:
myArray.each {
println Myclass."$it"()
}
你可以,例如,声明的接口,如:
public interface Processor
{
void process(String arg);
}
那么实现这个接口,例如单身。
然后创建一个Map<String, Processor>
键进行你的字符串,值是实现方式,并且调用时:
Processor p = theMap.containsKey(theString)
? theMap.get(theString)
: defaultProcessor;
p.process(theString);
我建议你看一下思考的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);