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