不带参数的Setter Java OOP

  • 本文关键字:Java OOP Setter 参数 java
  • 更新时间 :
  • 英文 :


我想在创建新员工对象时自动创建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。

最新更新