首页 > 解决方案 > 设置枚举的默认值(Java)

问题描述

我正在编写一些继承代码来显示公司中员工的信息。工人可以拥有三种状态,它们被放置在一个枚举中。{TEMPORARY,PART_TIME,FULL_TIME}。默认状态是临时的。我在运行代码时遇到的问题是,当我没有提及工作人员的状态时,它应该打印出“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();
   }
}

标签: javafunctioninheritancemethodsenums

解决方案


如果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这可能就是该字段仍然为 null 的原因。status直接在字段中设置默认值可以解决这个问题,但记住这一点仍然很有用!


推荐阅读