如何重构 else-if 以选择正确的构造函数

How to refactor else-if for choosing right constructor

我正在我的应用程序中实现工厂模式并且工作正常,除了下面的代码块(我有另一个代码块,另一个更大 class)。有什么方法可以重构这个 "jungle" 结构吗?提前致谢!

private Goal createLocalTaskInstance(HashMap<String, Object> goalDetails){
    Goal goal = null;

    if (goalDetails.get("description") == null &&
            goalDetails.get("endDate") == null){
        goal = new Task(String.valueOf(goalDetails.get("title")));

    } else if (goalDetails.get("description") != null &&
            goalDetails.get("endDate") == null) {
        goal = new Task(String.valueOf(goalDetails.get("title")),
                String.valueOf(goalDetails.get("description")));

    } else if (goalDetails.get("description") == null &&
            goalDetails.get("endDate") != null) {
        goal = new Task(String.valueOf(goalDetails.get("title")),
                        (Date) goalDetails.get("endDate"));

    } else if (goalDetails.get("description") != null &&
            goalDetails.get("endDate") != null){
        goal = new Task(String.valueOf(goalDetails.get("title")),
                String.valueOf(goalDetails.get("description")),
                (Date) goalDetails.get("endDate"));
    }
    return goal;
}

我建议您只调用默认构造函数(使用所有三个参数),而不管其中一些参数是否为 null,然后在构造函数中简单地进行 null 检查。它看起来像这样:

goal = new Task(String.valueOf(goalDetails.get("title"),
                goalDetails.get("description"), 
                goalDetails.get("endDate"));

任务class:

public class Task {
    private String title;
    private String description;
    private Date endDate;

    public Task(String title, String description, Date endDate) {
        this.title = title;
        if(description != null) {
            this.description = description;
        }
        if(endDate != null) {
            this.endDate = endDate;
        }
    }
}