java - 设置枚举的默认值(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();
}
}
解决方案
如果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
直接在字段中设置默认值可以解决这个问题,但记住这一点仍然很有用!
推荐阅读
- python - Python 中的 JSON 到 CSV 转换
- reactjs - Apollo graphql 正在为 mongodb 中的空子文档返回空数据
- excel - VBA根据当前时间突出显示单元格
- google-bigquery - 在 bigquery 上创建 n 列
- javascript - 如何选择具有特定同级的元素?
- java - 如何保存布尔值,以便在返回此活动时可以使用它们?
- mesh - Meshlab 三角形/曲面创建
- paperjs - Paperjs 参考不包括所有选项
- assembly - 如何在汇编时连接字符串(使用 CATSTR?)
- c# - 为什么货币修饰符“C”返回“?” 而不是 C# 中的“$”?