java 枚举排序

2022-09-04 05:41:02

我使用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;
    }
}

我的按钮枚举

public enum MODAL_BUTTON {
    SAVE, UPDATE, CANCEL, DELETE;
}

答案 1

使用代替 :Enum.values()EnumSet

请注意,每个枚举类型都有一个静态值方法,该方法返回一个数组,其中包含枚举类型的所有值(按声明顺序排列)。此方法通常与 for-each 循环结合使用,以循环访问枚举类型的值。

来源:Java 1.5 文档中的枚举


答案 2

根据 Enumset 的文档,迭代器应按声明的顺序返回 Enum 常量。

迭代器方法返回的迭代器按元素的自然顺序(枚举常量的声明顺序)遍历元素。返回的迭代器是弱一致的:它永远不会抛出 ConcurrentModificationException,并且它可能会或可能不会显示迭代过程中对集合进行的任何修改的效果。

尽管您的UI线程以不同的顺序访问枚举可能是关于它的。