【问题标题】:java enum with enum in constructorjava枚举与构造函数中的枚举
【发布时间】:2011-08-20 01:58:25
【问题描述】:

是否可以让 java 中的枚举以一组枚举作为参数?如果是,那我该如何实现呢?

当我使用它时,我想说的是:使用 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
}

【问题讨论】:

  • 这并不重要,但类(包括枚举类型)的正常命名约定是使用 CamelCase(即使枚举常量本身使用 UPPER_CASE)。

标签: java enums enumset


【解决方案1】:

是的,看看这个:

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]

【讨论】:

    【解决方案2】:

    没问题:

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

    【讨论】:

      【解决方案3】:

      而不是这个:

      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&lt;T&gt;,而不是EnumSet

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-03
        • 1970-01-01
        • 2020-10-28
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多