【问题标题】:Set default value of an enum (Java)设置枚举的默认值(Java)
【发布时间】:2021-08-23 15:27:36
【问题描述】:

我正在编写一些显示公司员工信息的继承代码。工人可以拥有三种状态,它们被放置在一个枚举中。 {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();
   }
}

【问题讨论】:

  • 一个枚举(比如你的“状态”)不能有“默认”值。任何一个 int 都可以有一个“默认数字”,或者一个字符串可以有一个“默认字符”。 员工可以拥有默认状态。问题:您只在一个构造函数中设置默认值,而不是所有构造函数。可能的解决方案:将您的成员声明更改为private Status status = Status.TEMPORARY;

标签: java function inheritance methods enums


【解决方案1】:

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

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

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

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

其他一些关于代码的cmets:

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

【讨论】:

    【解决方案2】:

    如果在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 字段仍然为空的原因,即使您给它一个默认值默认构造函数。直接在字段中设置默认值可以解决这个问题,但记住这一点仍然很有用!

    【讨论】:

      猜你喜欢
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多