2012-03-31 71 views
1

我是java編程中的新手,並試圖學習它。 我遇到了無法找到在網絡它可以解決的問題:內聯實例化類作爲Enum中的參數

我有一個枚舉,這是一個行動「清單」和他們每個人都有型操作的屬性 是conains列表可能的子活動。子區是常量字符串。

我想instanziate操作的anonymus實例在枚舉構造函數,以便 除了非標準子操作,每個枚舉可以有它的輔助作用

我試着寫像下面

枚舉
public enum Action { 
    ACTION1("One", new Actions(){ 
     public static final String TEST = "test"; 
    }), 
    ACTION2("TWO", null), 
    ACTION3("THREE,null); 

    private final String act; 
    public final Actions actions; 

    private Action(String act, Actions actions) { 
     this.act = act; 
     this.actions = actions; 
    } 
} 

,這是操作類

public class Actions { 
    public static final String SUBACTION_TEST1 = "suoOne"; 
    public static final String SUBACTION_TEST2 = "subTwo"; 
} 

不是,這是我如何使用操作枚舉:

String as = Action.ACTION1.params.SUBACTION_TEST1; 

,併到這裏就wors但I'cannot這樣寫:

String ast = Action.ACTION1.params.TEST; 

我知道,也許這種做法是錯誤的,但改變之前,我想執行 知道爲什麼沒有按沒有工作。

謝謝。

+0

我想你意思是「行動」而不是「參數」。 'actions'有一個'Actions'類型,它沒有字段TEST。如果它有一個名字,你可以投到「Actions」的子類,但它不是 – 2012-03-31 13:49:46

+0

,所以我的目標是希望使用這個代碼? – 2012-03-31 14:01:34

+0

我認爲它值得回顧一下你想做什麼,看看它是否能以另一種方式完成。 – 2012-03-31 14:07:24

回答

3

您的枚舉沒有名爲params的屬性,這是您的代碼示例不起作用的直接原因。有一兩件事你可以做些什麼來改善這樣的設計,是讓你Actions類通過一個定義良好的方法返回的子操作列表:

public class Actions { 
    public static final String SUBACTION_TEST1 = "suoOne"; 
    public static final String SUBACTION_TEST2 = "subTwo"; 

    public List<String> getSubActions() { 
     return Arrays.asList(SUBACTION_TEST1, SUBACTION_TEST2); 
    } 
} 

public enum Action { 
    ACTION1("One", new Actions(){ 
     public static final String TEST = "test"; 

     @Override 
     public List<String> getSubActions() { 
      return Arrays.asList(TEST); 
     } 
    }), 

    private final String act; 
    private final Actions actions; 

    private Action(String act, Actions actions) { 
     this.act = act; 
     this.actions = actions; 
    } 

    public Actions getActions() { 
     return actions; 
    } 
} 

,並使用此:

List<String> subActionList = Action.ACTION1.getSubActions(); 
+0

是的,你是對的,但參數是我減少這篇文章的原始代碼的殘餘。 String as = Action.ACTION1.actions.SUBACTION_TEST1; << ---這是正確的 但我想用這個語法來訪問子對象: String as = Action.ACTION1.actions.TEST; – 2012-03-31 13:57:12

+0

@EmergencyExit - Java中不支持這種動態屬性訪問。 'Action.ACTION1.actions'解析爲'Actions'類,而不是您在枚舉中定義的內部類。 – Perception 2012-03-31 14:15:14

+0

謝謝。我會改變代碼。 – 2012-03-31 14:26:58