2011-09-08 98 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

枚舉靜態地(編譯時間)被定義,唯一的對象,所以你不能使用動態參數創建它們的值。

直接的問題是你試圖使用非靜態成員變量實例化枚舉,因此在實例化類本身時不可用 - 它只會在創建新類對象時被初始化。但是,在封裝類初始化時,所有枚舉值都必須完全初始化。

很難看出你真的想用這段代碼實現 - 也許如果你用文字解釋它,我們可以提供一個更好的替代方法。