如何重构 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;
}
}
}
我正在我的应用程序中实现工厂模式并且工作正常,除了下面的代码块(我有另一个代码块,另一个更大 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;
}
}
}