设置枚举的默认值 (Java)
Set default value of an enum (Java)
我正在编写一些显示公司员工信息的继承代码。工人可以有三种状态,它们被放在一个枚举中。 {临时,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();
}
}
您似乎正在使用第二个构造函数来创建 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
。在这种情况下,您可能想抛出一个 exception/use 默认值。
- Setter 和 Getters 应该具有相同的数据类型。
getStatus
应该 return 状态,而不是它的格式化字符串版本。
如果在Faculty
class中定义时直接给status
字段赋值,那么默认情况下就是给该字段的值。
private Status status = Status.TEMPORARY;
这意味着您不再需要在不更改字段默认值 TEMPORARY
的构造函数中手动设置它。
public Faculty(){
// status = Status.TEMPORARY; This line can be removed.
}
还需要注意的是,当您从 Faculty
class:
中的此构造函数调用 super
构造函数时
public Faculty(String name, String email, String phoneNumber){
super(name, email, phoneNumber);
}
您编写的默认 Faculty
构造函数(将 status
设置为 TEMPORARY
的构造函数)未被调用,所以这可能就是 status
字段仍然存在的原因null 即使你在默认构造函数中给它一个默认值。直接在字段中设置默认值可以解决这个问题,但记住这一点仍然有用!
我正在编写一些显示公司员工信息的继承代码。工人可以有三种状态,它们被放在一个枚举中。 {临时,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();
}
}
您似乎正在使用第二个构造函数来创建 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
。在这种情况下,您可能想抛出一个 exception/use 默认值。 - Setter 和 Getters 应该具有相同的数据类型。
getStatus
应该 return 状态,而不是它的格式化字符串版本。
如果在Faculty
class中定义时直接给status
字段赋值,那么默认情况下就是给该字段的值。
private Status status = Status.TEMPORARY;
这意味着您不再需要在不更改字段默认值 TEMPORARY
的构造函数中手动设置它。
public Faculty(){
// status = Status.TEMPORARY; This line can be removed.
}
还需要注意的是,当您从 Faculty
class:
super
构造函数时
public Faculty(String name, String email, String phoneNumber){
super(name, email, phoneNumber);
}
您编写的默认 Faculty
构造函数(将 status
设置为 TEMPORARY
的构造函数)未被调用,所以这可能就是 status
字段仍然存在的原因null 即使你在默认构造函数中给它一个默认值。直接在字段中设置默认值可以解决这个问题,但记住这一点仍然有用!