java - 排除 if 的最佳方法,因为 if 会调用多个方法

标签 java jsp servlets

我有一个用 JSP 制作的表单,这里有多个按钮 - “批准、拒绝、保存、取消”。 对于每个提交,控件都会转到单个 Controller (Servlet),并且我将这个提交处理为::

String methodName = (String) request.getParameter("methodName");
if(methodName.trim.toLower().equals("approve")) 
{
  approve_Claim(parameters);
}
else if(methodName.trim.toLower().equals("reject")) 
{
  reject_Claim(parameters);
}
else if(methodName.trim.toLower().equals("save")) 
{
  save_Claim(parameters);
}
else if(methodName.trim.toLower().equals("cancel")) 
{
  cancel_Claim(parameters);
}

有没有办法删除这些多个if, 请建议

最佳答案

看起来您基本上想要一个来自 methodName.trim().toLower() 的映射某种带有参数的“声明操作”。创建一个像这样的界面:

interface ClaimAction
{
    void execute(Parameters parameters);
}

然后用CancelClaimAction类来实现它, ApproveClaimAction等等。接下来创建一个 Map<String, ClaimAction>将“批准”映射到 ApproveClaimAction等等然后:

String actionName = methodName.trim().toLower(Locale.US));
ClaimAction action = CLAIM_ACTION_MAPPING.get(actionName);
if (action != null)
{
    action.execute(parameters);
}
else
{
    // Error case, presumably.
}

可以使用枚举来做到这一点,但我期望每个类都有足够的工作来完成,因此值得将它们分开并测试每个类单独。

关于java - 排除 if 的最佳方法,因为 if 会调用多个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11201369/

相关文章:

java - 线程局部变量为空

Java 泛型,使用泛型的类必须始终是某种类型的容器吗?

mysql - SQL 更新语法错误

javascript - 我如何将 foreach 按钮单个值传递给 javascript?

mysql - 使用 hibernate 登录失败 servlet

java - 如何从类中调用 servlet

java - 我如何在 Java 中同时完成 80,000 次下载?

java - HTTP 404 Hello World JSP 在 eclipse 之外

java - Tomcat 不读取 web.xml 文件

java - 如何在android中的插槽类型中获取时间