gpt4 book ai didi

java - 创建具有不同参数的相似子类实例的方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:43 24 4
gpt4 key购买 nike

我目前正在学习 Java。我有一个包含父类(super class) (IndexCard) 和两个子类(EmployeeIndexCard 和 CustomerIndexCard)的项目。这两个子类非常相似,但它们的实例变量彼此不同,因此构造函数也不同。

他们在这里:

class EmployeeIndexCard extends IndexCard {
public WorkArea workArea ;
protected String password;

public employeeIndexCard(String name, String password, String adress, String phone, String email, String workArea) {
super(name, adress, phone, email);
this.password = password;
this.workArea = WorkArea.valueOf(workArea);
}
}


class CustomerIndexCard extends IndexCard {
public customerIndexCard(String name, String adress, String phone, String email) {
super(name, adress, phone, email);
}
}

我想知道我做错了什么,因为为了创建这些类的实例,我创建了两个非常相似的方法:

/**
* Create an instance of EmployeeIndexCard.
*/
public static void employeeIndexCard(String name, String dni, String password, String adress, String phone, String email, String workArea) {
if (Utils.validateDni(dni) && !IndexCard.list.containsKey(dni)) {
IndexCard.list.put(dni, new EmployeeIndexCard(name, password, adress, phone, email, workArea));
} else {
throw new InvalidParameterException();
}
}

/**
* Create an instance of CustomerIndexCard.
*/
public static void customerIndexCard(String name, String dni, String adress, String phone, String email) {
if (Utils.validateDni(dni) && !IndexCard.list.containsKey(dni)) {
IndexCard.list.put(dni, new FichaCliente(name, adress, phone, email));
} else {
throw new InvalidParameterException();
}
}

有什么方法可以重组代码以合并这最后两个几乎相同的方法吗?

最佳答案

由于您的两个类共享一个父类,因此重构代码的最自然方式是将创建实例的责任交给调用者,并接受 IndexCard 类型的任何实例:

public static void addIndexCard(String dni, IndexCard indexCard) {
if (Utils.validateDni(dni) && !IndexCard.list.containsKey(dni)) {
IndexCard.list.put(dni, indexCard);
} else {
throw new InvalidParameterException();
}
}

这样,您可以简单地调用它:

//add customer index card:
addIndexCard("dni", new FichaCliente(name, adress, phone, email));

//add employee index card:
addIndexCard("dni2", new EmployeeIndexCard(name, password, adress,
phone, email, workArea));

关于java - 创建具有不同参数的相似子类实例的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50603964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com