在运行时使用一些字符串调用方法

时间:2019-02-15 06:37:39

标签: java

我是新手,我需要解决方案或想法如何做到

我有以下代码:

if (page.getId().equals("STEP_NAME_SUBMIT_OTP_FOR_TRANSACTION"))
    emRequestResponse.setTagElementList(agent.getHeader().getTagElementList().getSTEP_NAME_SUBMIT_OTP_FOR_TRANSACTION());
else if (page.getId().equals("STEP_NAME_SUBMIT_CAPTCHA_FOR_LOGIN"))
    emRequestResponse.setTagElementList(agent.getHeader().getTagElementList().getSTEP_NAME_SUBMIT_CAPTCHA_FOR_LOGIN());

我需要一种基于id的运行时调用该方法的更好方法,因此,如果名称为STEP_NAME_SUBMIT_OTP_FOR_TRANSACTION,则需要调用该方法getSTEP_NAME_SUBMIT_OTP_FOR_TRANSACTION,依此类推。

3 个答案:

答案 0 :(得分:2)

您可以调用如下代码的方法:

try {
Method method = emRequestResponse.getDeclaredMethod("method name", parameterTypes);
method.invoke(objectToInvokeOn, params);
} catch(Exception ex) {
System.out.println(ex.toString());
}

答案 1 :(得分:0)

您可以在switch上使用if-elseswitch的效果要好于if-else

开关性能会更好,因为在开关的情况下将进行一次评估。一旦评估了该开关,它便知道需要执行哪种情况,但是在其他情况下,如果情况最糟,则必须经过所有条件。

在大量条件下,开关性能会更好,但对于较短的列表(仅两个条件),它也会变慢

答案 2 :(得分:0)

您问题的答案是Java的 REFLECTION API

我建议对字符串使用switch case,因为根据您的要求,我认为可以将字符串制成final

使用Method类,可以通过填充方法名称和必需的参数来调用方法。

假设您要调用的方法在名为TagElementsList的类中定义,下面的代码块应为您解决问题。

private List invokeMethod(TagElementsList tagElementsList, String pageId) {
    Method method = TagElementsList.class.getMethod("get"+pageId);
    List returnList = (TagElementsList)method.invoke(tagElementsList);
    return returnList;
}

因此,考虑到上述方法与声明在同一类中,可以通过以下调用从代码中所需位置调用invokeMethod方法来使方法根据需要工作。从必须调用它的位置。当然,您可以将其定义在另一个类中,也可以通过该类的实例调用该方法的调用。

List list = invokeMethod(agent.getHeader().getTagElementList(), page.getid());
 emRequestResponse.setTagElementList(list);