我有一个存储在变量中的通用字符串String func = "validate";
,我想调用该名称的函数,即我需要调用validate()
函数。
我的意思是说我会将变量传递给某个函数
public void callFunc(String func){
....
}
,所以上面的函数应该调用适当的函数,并将函数名作为参数传递给callfunc()
.
问问题
7461 次
2 回答
15
您可以使用反射来做到这一点,例如
Method method = getClass().getMethod(func);
// TODO: Validation
method.invoke(this);
当然,这是假设您要调用 on 上的方法this
,并且它是一个实例方法。查看Class.getMethod
和相关的方法,连同它Method
本身,以获取更多详细信息。您可能想要getDeclaredMethod
,并且您可能需要使其可访问。
如果可能的话,我会看看你是否能想出一种避免这种情况的方法——反射往往会很快变得混乱。值得退后一步考虑这是否是最好的设计。如果您向我们提供有关大局的更多详细信息,我们或许可以提出替代方案。
于 2012-05-09T06:19:30.457 回答
0
除了使用反射之外,还有另一种方法。您可以编写如下模式匹配:
switch (func) {
case "validate": validate(); break;
case "apply": apply(); break;
default: break;
}
但我同意乔恩的观点:尽量避免这种情况。如果您使用模式匹配,则必须应用更改两次。例如,如果添加另一个方法,则需要将其添加到函数命名方法和模式匹配中。
于 2012-05-09T06:41:22.693 回答