更优化的写if-else的方法

时间:2018-04-30 06:25:03

标签: java if-statement

我是java的新手什么是正确的写法if和else阻塞下面的代码请让我知道我实现了什么错误。而且我必须使用所有这些if..else阻止3次不同的条件。我得到了所有的输出,但我想让它更加优化。我认为我们可以使用常量类来使其更加优化

if (roleName.equalsIgnoreCase("Project Manager")) {
    if (actionsPerform.equalsIgnoreCase("Approval")) {
        reimbursementHistory.setOldStatus(0);
        reimbursementHistory.setNewStatus(1);
        reimbursementHistory.setAssignTo((String) reimbursementHistoryDetails.get("businessUnitId"));
        reimbursementHistory.setAssignne((String) reimbursementHistoryDetails.get("projectManagerId"));
    }
    else if (actionsPerform.equalsIgnoreCase("Query")) {
        reimbursementHistory.setOldStatus(1);
                                reimbursementHistory.setNewStatus(6);
        reimbursementHistory.setAssignne((String) reimbursementHistoryDetails.get("projectManagerId"));
        reimbursementHistory.setAssignTo((String) reimbursementHistoryDetails.get("empCode"));
    }
}

1 个答案:

答案 0 :(得分:0)

根据条件的复杂程度,我会使用简单的Map将这些参数存储在POJO中。

private static final class Params{
    final int oldStatus;
    final int newStatus;
    final String AssignTo;
    final String AssignNe;

    public Params(int oldStatus, int newStatus, String assignTo, String assignNe) {
        this.oldStatus = oldStatus;
        this.newStatus = newStatus;
        this.AssignTo = assignTo;
        this.AssignNe = assignNe;
    }
}

然后首先创建每个参数

private static Map<String, Params> params = new HashMap<>();

public static void main(String[] args) {
    params.put("Approval", new Params(0,  1, "businessUnitId", "projectManagerId"));
    params.put("Query", new Params(1,  6, "empCode", "projectManagerId"));
}

然后你只需要定义一个设置值的方法

public boolean setHistory(Params p){
    reimbursementHistory.setOldStatus(p.oldStatus);
    reimbursementHistory.setNewStatus(p.newStatus);
    reimbursementHistory.setAssignTo((String) reimbursementHistoryDetails.get(p.AssignTo));
    reimbursementHistory.setAssignne((String) reimbursementHistoryDetails.get(p.AssignNe));
}

使用一些方法参考和Optional

来调用它
Optional.of(params.get("Query"))
    .map(this::setHistory)
    .orElseThrow(IllegalArgumentException::new);

使用Optional可以轻松抛出异常(如果找不到)。