java java枚举与构造函数中的枚举

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5910019/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 13:24:07  来源:igfitidea点击:

java enum with enum in constructor

javaenumsenumset

提问by Marthin

Is it possible to let a enum in java take a set of enums as as argument? If yes, then how do I implement it?

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

When using this I whant to be able to say something like: Take a MODAL_SETTINGS.EDIT_MODAL_WINDOW and create this with the buttons MODAL_BUTTONS.SAVE & MODAL_BUTTONS.CANCEL.

使用它时,我希望能够说这样的话:拿一个 MODAL_SETTINGS.EDIT_MODAL_WINDOW 并用按钮 MODAL_BUTTONS.SAVE 和 MODAL_BUTTONS.CANCEL 创建它。

This is what I have as of now

这是我目前所拥有的

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
}

回答by Jon Skeet

Instead of this:

取而代之的是:

NEW_MODAL_WINDOW(MODAL_BUTTONS.class),

I suspect you want this:

我怀疑你想要这个:

NEW_MODAL_WINDOW(EnumSet.allOf(MODAL_BUTTONS.class))

or

或者

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

(etc).

(等等)。

Otherwise you're just passing a Class<T>, not an EnumSet.

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

回答by Andreas Dolk

No problem:

没问题:

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

回答by dhblah

Yes, look at this:

是的,看看这个:

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

The output is:

输出是:

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