我有一个存储在变量String func = "validate";
中的泛型字符串,我想调用该名称的函数,即我需要调用validate()
函数。我的意思是说我将变量传递给某个函数
public void callFunc(String func){
....
}
所以,上面的函数应该调用相应的函数,函数名作为参数传递给callfunc()
。
答案 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;
}
但我同意乔恩:尽量避免这种情况。如果使用模式匹配,则必须应用更改两次。例如,如果添加其他方法,则需要将其添加到函数命名方法和模式匹配中。