为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

跃然一笑 2022-06-23 08:56:06
我不熟悉这些,我需要一个解决方案或想法我该怎么做我有以下代码: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 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

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


try {

Method method = emRequestResponse.getDeclaredMethod("method name", parameterTypes);

method.invoke(objectToInvokeOn, params);

} catch(Exception ex) {

System.out.println(ex.toString());

}


查看完整回答
反对 回复 2022-06-23
?
HUWWW

TA贡献1874条经验 获得超12个赞

您的问题的答案是 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);


查看完整回答
反对 回复 2022-06-23
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您可以使用switchover if-elseswitch性能优于if-else.

切换性能会更好,因为切换时会有一次评估。一旦它评估了开关,它就知道需要执行哪种情况,但如果是其他情况,它必须通过所有条件以防最坏的情况。

在大量条件的情况下,切换性能会更好,但对于较短的列表(只有两个条件),它也可能会更慢


查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号