2011-09-08 202 views
0

一类,它得到了枚举:是否可以在Java枚举中使用上范围对象?

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; 
     } 
    } 
} 

Employee类:

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; 
    } 
} 

当我试图编译它得到错误,

/家庭/ shamal/src目录/测试/src/test/EnumTest.java:21:非静态变量empl不能从静态上下文中引用FNAME(empl.getFirstName()),

/home/shamal/src/Test/s rc/test/EnumTest.java:22:非静态变量empl不能从静态上下文中引用LNAME(empl.getLastName()),

/home/shamal/src/Test/src/test/EnumTest。 java:23:非静态变量empl不能从静态上下文中引用POSITION(empl.getPosition());

3错误

什么是错误的代码和什么应该是正确的方式?

谢谢。

回答

6

枚举静态地(编译时间)被定义,唯一的对象,所以你不能使用动态参数创建它们的值。

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

很难看出你真的想用这段代码实现 - 也许如果你用文字解释它,我们可以提供一个更好的替代方法。