Java:如何调用名称存储在字符串变量中的函数

时间:2012-05-09 06:16:17

标签: java reflection method-invocation

我有一个存储在变量String func = "validate";中的泛型字符串,我想调用该名称的函数,即我需要调用validate()函数。我的意思是说我将变量传递给某个函数
public void callFunc(String func){
....
}
所以,上面的函数应该调用相应的函数,函数名作为参数传递给callfunc()

2 个答案:

答案 0 :(得分:15)

可以使用反射来做到这一点,例如

Method method = getClass().getMethod(func);
// TODO: Validation
method.invoke(this);

假设你想在this上调用方法,当然,这是一个实例方法。有关更多详细信息,请查看Class.getMethod及相关方法以及Method本身。您可能需要getDeclaredMethod,而您可能需要将其设为可访问。

如果可能的话,我会想到你是否可以想到避免这种情况的方法 - 反思往往会很快变得混乱。值得退后一步并考虑这是否是最好的设计。如果您向我们提供更多详细信息,我们可能会建议替代方案。

答案 1 :(得分:0)

除了使用反射之外还有另外一种方法。您可以编写如下匹配的模式:

switch (func) {
  case "validate": validate(); break;
  case "apply": apply(); break;
  default: break;
}

但我同意乔恩:尽量避免这种情况。如果使用模式匹配,则必须应用更改两次。例如,如果添加其他方法,则需要将其添加到函数命名方法和模式匹配中。