java enums订购

Mar*_*hin 11 java enums enumset

我使用java枚举来定义如何使用按钮渲染模态窗口(Vaadin处理渲染).我的问题是,当我运行gui时,我的按钮每次都以随机顺序出现.所以我的问题是这个,因为我使用枚举设置来保持我的按钮,这将是无序的吗?什么是最好的方式使它成为有序列表?

我的设置枚举

public enum MODAL_SETTINGS {
    NEW_MODAL_WINDOW("menu.context.new", "400", MODAL_BUTTON.SAVE, MODAL_BUTTON.CANCEL),
    EDIT_MODAL_WINDOW("menu.context.modify","400", MODAL_BUTTON.UPDATE, MODAL_BUTTON.CANCEL),
    DELETE_MODAL_WINDOW("menu.context.delete", "250", false, MODAL_BUTTON.DELETE, MODAL_BUTTON.CANCEL);

    private EnumSet<MODAL_BUTTON> buttons;
    private String caption;
    private String width;
    private boolean isResizable = true;

    private MODAL_SETTINGS(String caption, String width, MODAL_BUTTON... buttons){
        this.setCaption(caption);
        this.setWidth(width);
        this.buttons = EnumSet.copyOf(Arrays.asList(buttons));
    }

    private MODAL_SETTINGS(String caption, String width, boolean isResizable, MODAL_BUTTON... buttons){
        this.setCaption(caption);
        this.setWidth(width);
        this.isResizable = isResizable;
        this.buttons = EnumSet.copyOf(Arrays.asList(buttons));
    }

    public EnumSet<MODAL_BUTTON> getButtons(){
        return buttons;
    }

    @Override
    public String toString(){
        String s = super.toString();
        s=s.replaceAll("_", ".");
        return s;
    }

    public void setCaption(String caption) {
        this.caption = caption;
    }

    public String getCaption() {
        return caption;
    }

    public void setWidth(String width) {
        this.width = width;
    }

    public String getWidth() {
        return width;
    }

    public boolean isResizable() {
        return isResizable;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的按钮枚举

public enum MODAL_BUTTON {
    SAVE, UPDATE, CANCEL, DELETE;
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*anu 26

使用Enum.values()而不是EnumSet:

请注意,每个枚举类型都有一个静态值方法,该方法返回一个数组,该数组按照声明的顺序返回枚举类型的所有值.此方法通常与for-each循环结合使用,以迭代枚举类型的值.

来源:Java 1.5文档中的枚举


Yet*_*eek 7

根据Enumset文档,迭代器应该按照它们的声明顺序返回Enum常量.

迭代器方法返回的迭代器以其自然顺序(枚举常量声明的顺序)遍历元素.返回的迭代器是弱一致的:它永远不会抛出ConcurrentModificationException,它可能会也可能不会显示迭代进行过程中对集合所做的任何修改的影响.

虽然它可能与你的UI线程以不同的顺序访问枚举有关.