设置枚举(Java)的默认值



我正在编写一些继承代码,用于显示公司员工的信息。工作程序可以具有三种状态,这些状态被放置在枚举中。{TEMPORARY,PART_TIME,FULL_TIME}。默认状态为"临时"。当我运行代码时,我在代码中遇到的问题是,当我没有提到工作者的状态时;"临时";但它打印出";空";相反,我不确定如何修复它。关于这个问题,我认为枚举与数组相似,我应该给它一些值,然后再更改它。

这是我的代码:

class Faculty extends Employee{
private Status status;
public Faculty(){
status = Status.TEMPORARY;
}
public Faculty(String name, String email, String phoneNumber){
super(name, email, phoneNumber);
}
public Faculty(String name, String email, String phoneNumber, String office, double salary, Status status){
super(name, email, phoneNumber, office, salary);
this.status = status;
}
public void setStatus(Status status){
this.status = status;
}
public String getStatus(){
return " Status: " + status;
}
@Override
public String toString(){
return getName() + getEmail() + getPhoneNumber() + getOffice() + " Salary: " + getSalary() + getStatus();
}
}

您似乎正在使用第二个构造函数来创建Faculty。但是,此构造函数从不将status字段设置为任何值,而是将其保留为null。

为了确保status有一个值,您必须在构造函数中添加一行:

public Faculty(String name, String email, String phoneNumber){
super(name, email, phoneNumber);
this.status = Status.TEMPORARY;
}

或者,您可以将初始化添加到字段声明中:private Status status = Status.TEMPORARY;

关于代码的其他一些评论:

  • 仍然可以在第三个构造函数中或通过setter将status设置为null。在这种情况下,您可能想要抛出异常/使用默认值
  • Setter和Getter应具有相同的数据类型。getStatus应该返回状态,而不是格式化的字符串版本

如果在Faculty类中定义status字段时直接给它一个值,那么默认情况下该值就是给字段的值。

private Status status = Status.TEMPORARY;

这意味着您不再需要在构造函数中手动设置它,因为构造函数不会更改字段的默认值TEMPORARY

public Faculty(){
// status = Status.TEMPORARY; This line can be removed.
}

还需要注意的是,当您从Faculty类中的构造函数调用super构造函数时:

public Faculty(String name, String email, String phoneNumber){
super(name, email, phoneNumber);
}

您编写的默认Faculty构造函数(将status设置为TEMPORARY的构造函数(没有被调用,所以这可能就是为什么即使在默认构造函数中为status字段指定了默认值,它仍然为null的原因。直接在字段中设置默认值可以解决这个问题,但记住这一点仍然很有用!

最新更新