我是新手,我需要解决方案或想法如何做到
我有以下代码:
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
,依此类推。
答案 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-else
,switch
的效果要好于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);