我想在创建新员工对象时自动创建employeeID。我正在为我的任务实现OOP概念。我的问题是,我想使用getter和setter来创建id。然而,由于id应该自动生成,所以在创建实例时我不能为参数设置任何值。我该如何解决这个问题?
private String employeeID;
public void setEmployeeID(String employeeID){
Random rand = new Random();
int randint = rand.nextInt(100000);
char subId = 'E';
employeeID = subId + String.valueOf(randint);
this.employeeID = employeeID;
}
public String getEmployeeID(){
return employeeID;
}
为了简单起见:您需要或想要使用public void setEmployeeId(String id)
及其基本要求。但如果是这样的话,拥有这样一个方法的想法意味着类Employee
应该具有任何id生成逻辑,而不是通过声明这样一个你对将使用Employee class
的程序员说的方法:";看,这个类没有id,但是你可以创建它并设置"。
如果这些是您的意图,那么提取员工类之外的id生成逻辑,并使用";纯";setter:
main:
String id = generateId(...) // in this method there will be all the code with Random
Employee emp = new Employee();
emp.setId(id);
.....
class Employee {
private String id;
public void setId(String id) {this.id = id;}
}
否则,如果您确实认为Employee应该自己生成一个id,则不需要setter。在这种情况下,您可以在构造函数中调用生成代码(不是真正推荐的,但会起作用(,也可以创建一个";init";方法,该方法将为employee对象设置id的初始状态。在这种情况下,无论谁创建了Employee,都必须调用以下方法:
public class Employee {
private String employeeId;
public class Employee(...) {...}
public void init() {
setupId();
}
private void generateEmpId() {
Random rand = new Random();
int randint = rand.nextInt(100000);
char subId = 'E';
employeeID = subId + String.valueOf(randint);
this.employeeID = employeeID;
}
}
然后主要是:
main:
Employee e = new Employee();
e.init(); // otherwise id won't be generated
这不是很方便,因为无论谁使用创建Employee
对象,都必须调用它上的init
public class Employee {
private final String name;
private String empId;
private Employee(String name) {
this.name = name;
}
public static Employee create(String name) {
Employee emp = new Employee(name);
emp.init();
}
private void init() {
setupId();
}
private void generateEmpId() {
Random rand = new Random();
int randint = rand.nextInt(100000);
char subId = 'E';
employeeID = subId + String.valueOf(randint);
this.employeeID = employeeID;
}
}
请注意,构造函数现在是私有的,这意味着从main
创建Employee
的唯一方法是使用create
方法。init
方法也被私有化:
main:
Employee emp = Employee.create("John");
// the id is created - no need to remember to call "init" like in the previous example
员工类应该看起来像:
public class Employee {
private String employeeID;
public Employee() {
}
public void setEmployeeId(String employeeID){
this.employeeID = employeeID;
}
public String getEmployeeId(){
return employeeID;
}
}
从您想要分配新id的类中,使用以下内容:
public String generateId(String subId) {
Random rand = new Random();
int randint = rand.nextInt(100000);
return subId.concat(String.valueOf(randint));
}
Employee employee = new Employee();
employee.setEmployeeId(generateId('E'));
public class Emp {
private String id;
public Emp(){
id=getRandomId();
}
public void setId(String x){
id=new String(x);
}
public String getId(){
return new String (id);
}
public static String getRandomId(){
Random rand = new Random();
return "E"+rand.nextInt(100000);
}
}
getRandomId将返回一个随机id。