获得枚举的第一堂课:
public class EnumTest {
private Employee empl;
public EnumTest(Employee empl) {
this.empl = empl;
}
public enum ALL_STRING {
FNAME(empl.getFirstName()),
LNAME(empl.getLastName()),
POSITION(empl.getPosition());
String str;
ALL_STRING(String inStr) {
str = inStr;
}
public String getStr() {
return str;
}
}
}
员工类:
public class Employee {
private String firstName;
private String lastName;
private String position;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
当我尝试编译它时会出现错误,
/home/shamal/src/Test/src/test/EnumTest.java:21:无法从静态上下文FNAME(empl.getFirstName())引用非静态变量empl,
/home/shamal/src/Test/src/test/EnumTest.java:22:无法从静态上下文LNAME(empl.getLastName())中引用非静态变量empl,
/home/shamal/src/Test/src/test/EnumTest.java:23:无法从静态上下文POSITION(empl.getPosition())引用非静态变量empl;
3个错误
代码有什么问题,应该采用哪种方法?
感谢。
答案 0 :(得分:6)
枚举是静态(编译时)定义的唯一对象,因此您无法使用动态参数创建其值。
直接问题是你试图使用非静态成员变量来实例化枚举,因此在实例化类本身时它是不可用的 - 它只会在创建新的类对象时初始化。但是,必须在初始化封闭类时完全初始化所有枚举值。
很难看到您使用此代码实际尝试实现的目标 - 也许如果您用文字解释,我们可以提供更好的替代方法。