设置枚举的默认值(Java)

设置枚举的默认值(Java),java,function,inheritance,methods,enums,Java,Function,Inheritance,Methods,Enums,我正在编写一些继承代码来显示公司员工的信息。工作人员可以具有三种状态,它们位于枚举中。{临时、兼职、全职}。默认状态为临时。我在运行代码时遇到的问题是,当我没有提到工作人员的状态时,它应该打印出“临时”,但它打印出“null”,我不确定如何修复它。关于这个问题,我假设枚举类似于数组,我应该给它一些值,然后在以后更改它 这是我的代码: class Faculty extends Employee{ private Status status; public Facult

我正在编写一些继承代码来显示公司员工的信息。工作人员可以具有三种状态,它们位于枚举中。{临时、兼职、全职}。默认状态为临时。我在运行代码时遇到的问题是,当我没有提到工作人员的状态时,它应该打印出“临时”,但它打印出“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();
   }
}

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

要确保
状态
具有值,必须向构造函数添加一行:

public教员(字符串名称、字符串电子邮件、字符串电话号码){
超级(姓名、电子邮件、电话号码);
this.status=status.TEMPORARY;
}
或者您可以将初始化添加到字段声明中:
private Status Status=Status.TEMPORARY

关于代码的其他一些注释:

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

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

要确保
状态
具有值,必须向构造函数添加一行:

public教员(字符串名称、字符串电子邮件、字符串电话号码){
超级(姓名、电子邮件、电话号码);
this.status=status.TEMPORARY;
}
或者您可以将初始化添加到字段声明中:
private Status Status=Status.TEMPORARY

关于代码的其他一些注释:

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

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

private Status Status=Status.TEMPORARY;
这意味着您不再需要在构造函数中手动设置它,而该构造函数不会更改字段的默认值
TEMPORARY

公共学院(){ //status=status.TEMPORARY;可以删除此行。 }
还需要注意的是,当您在
Faculty
类中从此构造函数调用
super
构造函数时:

public教员(字符串名称、字符串电子邮件、字符串电话号码){
超级(姓名、电子邮件、电话号码);
}

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

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

private Status Status=Status.TEMPORARY;
这意味着您不再需要在构造函数中手动设置它,而该构造函数不会更改字段的默认值
TEMPORARY

公共学院(){ //status=status.TEMPORARY;可以删除此行。 }
还需要注意的是,当您在
Faculty
类中从此构造函数调用
super
构造函数时:

public教员(字符串名称、字符串电子邮件、字符串电话号码){
超级(姓名、电子邮件、电话号码);
}
您编写的默认
status
构造函数(将
status
设置为
TEMPORARY
的构造函数)未被调用,因此,即使在默认构造函数中为
status
字段指定了默认值,该字段仍然为空。直接在字段中设置默认值可以解决此问题,但记住这一点仍然很有用

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