使用具有多个参数的Java枚举

使用具有多个参数的Java枚举,java,enums,Java,Enums,我正在使用下面这样的枚举代码片段,这对我很有帮助。但是,当我想要定义多个具有相同参数的枚举(例如,ENUM2、ENUM3)时,我必须在代码段中编写标记为“重复代码”的所有内容 我想将所有参数(p1,…)封装在一个对象中,并在枚举中提供对该对象的引用。然而,这个想法让我感到不安,因为会生成其他额外的实例 上述方法是否正确,或者如何解决这个问题 public enum ENUM1 { KEY_1(p1, p2, ..., pn), ... KEY_M(p1, p2, ...,

我正在使用下面这样的枚举代码片段,这对我很有帮助。但是,当我想要定义多个具有相同参数的枚举(例如,ENUM2、ENUM3)时,我必须在代码段中编写标记为“重复代码”的所有内容

我想将所有参数(p1,…)封装在一个对象中,并在枚举中提供对该对象的引用。然而,这个想法让我感到不安,因为会生成其他额外的实例

上述方法是否正确,或者如何解决这个问题

public enum ENUM1 {
    KEY_1(p1, p2, ..., pn),
    ...
    KEY_M(p1, p2, ..., pn);

    // constructor

    // REPEATED CODE
    private int p1, p2, ..., pn;
    public getP1();
    ...
    public getPM();
}
试试这个:

public enum ENUM1 {

    KEY_1(Arrays.asList(1, 2, 3)),
    KEY_2(Arrays.asList(4, 5, 6));

    ENUM1(List<Integer> ps) {
        params = Collections.unmodifiableList(ps);
    }

    private List<Integer> params;

    public int getP(int idx) {
        return params.get(idx);
    }

}
公共枚举枚举1{
键_1(Arrays.asList(1,2,3)),
键2(Arrays.asList(4,5,6));
枚举1(列表ps){
params=集合。不可修改列表(ps);
}
私有列表参数;
公共int getP(int idx){
返回参数get(idx);
}
}

如果有多个相同类型的参数,则可以使用集合。稍后,当您需要检索特定参数时,请使用
getP()
方法,只需记住索引是基于0的。

您可以创建一个包含参数集的枚举,并将其传递到第二个枚举-但是为什么要使用第二个枚举呢?:-)请参阅@Smutje:Enum具有相同的参数仍然很有用,否则为什么要使用参数较少的Enum?