是否可以在Java枚举中使用上部范围对象?

时间:2011-09-08 18:47:42

标签: java enums

获得枚举的第一堂课:

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个错误

代码有什么问题,应该采用哪种方法?

感谢。

1 个答案:

答案 0 :(得分:6)

枚举是静态(编译时)定义的唯一对象,因此您无法使用动态参数创建其值。

直接问题是你试图使用非静态成员变量来实例化枚举,因此在实例化类本身时它是不可用的 - 它只会在创建新的类对象时初始化。但是,必须在初始化封闭类时完全初始化所有枚举值。

很难看到您使用此代码实际尝试实现的目标 - 也许如果您用文字解释,我们可以提供更好的替代方法。