设置枚举的默认值(Java)

时间:2021-06-06 06:46:05

标签: java function inheritance methods enums

我正在编写一些显示公司员工信息的继承代码。工人可以拥有三种状态,它们被放置在一个枚举中。 {TEMPORARY,PART_TIME,FULL_TIME}。默认状态为 TEMPORARY。我在运行代码时遇到的问题是,当我没有提到工作人员的状态时,它应该打印出“TEMPORARY”但它打印出“null”,我不确定如何解决它。我对这个问题的假设是,我相信枚举类似于数组,我应该给它某种值,然后再更改它。

这是我的代码:

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();
   }
}

2 个答案:

答案 0 :(得分:3)

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

要确保 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 应该返回状态,而不是它的格式化字符串版本。

答案 1 :(得分:3)

如果您在 status 类中定义时直接给 Faculty 字段赋值,那么该值将是默认给该字段的值。

private Status status = Status.TEMPORARY;

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

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

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

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

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