2011-05-06 83 views
3

是否有可能让一个枚举的枚举作为参数在java中的枚举?如果是的话,那我该如何执行它?Java枚举与枚举在构造函数

当使用这个我whant能够这样说:乘坐MODAL_SETTINGS.EDIT_MODAL_WINDOW创建此与按钮MODAL_BUTTONS.SAVE & MODAL_BUTTONS.CANCEL。

这是我到现在为止

public enum MODAL_SETTINGS { 
    NEW_MODAL_WINDOW(MODAL_BUTTONS.class), 
    EDIT_MODAL_WINDOW(MODAL_BUTTONS.class), 
    DELETE_MODAL_WINDOW(MODAL_BUTTONS.class); 

    private EnumSet buttons; 

    private MODAL_SETTINGS(EnumSet<MODAL_BUTTONS> buttons){ 

    } 

} 
public enum MODAL_BUTTONS { 
    SAVE, UPDATE, CANCEL, DELETE 
} 
+1

这是不是真的有关,但正常的命名约定类(包括枚举类型)是使用CamelCase(即使枚举常量本身使用UPPER_CASE)。 – Daniel 2011-06-29 23:58:44

回答

12

取而代之的是:

NEW_MODAL_WINDOW(MODAL_BUTTONS.class), 

我怀疑你想这样的:

NEW_MODAL_WINDOW(EnumSet.allOf(MODAL_BUTTONS.class)) 

NEW_MODAL_WINDOW(EnumSet.of(MODAL_BUTTONS.SAVE, MODAL_BUTTONS.CANCEL)) 

(等)。

否则,你只是通过了Class<T>,而不是EnumSet

10

没有问题:

enum Color {YELLOW, BLUE, GREEN} 

enum Environment { 
    SUN(Color.YELLOW), OCEAN(Color.BLUE), TREE(Color.GREEN); 

    private Color color; 
    private Environment(Color color) { 
     this.color = color; 
    } 
    public Color getColor() { 
     return color; 
    } 
} 
2

是的,看看这个:

import java.util.EnumSet; 
public class EnumTest { 
public static enum MODAL_BUTTONS { 
    SAVE, UPDATE, CANCEL, DELETE 
} 
public static enum MODAL_SETTINGS { 
    NEW_MODAL_WINDOW(EnumSet.of(MODAL_BUTTONS.SAVE, MODAL_BUTTONS.UPDATE)), 
    EDIT_MODAL_WINDOW(EnumSet.of(MODAL_BUTTONS.UPDATE, MODAL_BUTTONS.CANCEL)), 
    DELETE_MODAL_WINDOW(EnumSet.of(MODAL_BUTTONS.CANCEL, MODAL_BUTTONS.DELETE)); 

    private EnumSet<MODAL_BUTTONS> buttons; 

    MODAL_SETTINGS(EnumSet<MODAL_BUTTONS> buttons){ 
     this.buttons = buttons; 
    } 
    EnumSet<MODAL_BUTTONS> getBtns() { 
     return this.buttons; 
    } 
} 
    public static void main(String... args) { 
     System.out.println(MODAL_SETTINGS.NEW_MODAL_WINDOW.getBtns()); 
     System.out.println(MODAL_SETTINGS.EDIT_MODAL_WINDOW.getBtns()); 
     System.out.println(MODAL_SETTINGS.DELETE_MODAL_WINDOW.getBtns()); 
    } 
} 

输出是:

[SAVE, UPDATE] 
[UPDATE, CANCEL] 
[CANCEL, DELETE]