为枚举值分配枚举

时间:2013-09-12 08:55:47

标签: java enums

我想为enum分配一个像

这样的枚举值

enum 1

public enum e1{
    value1, 
    value2;
}

enum 2

public enum e2{
    val1 ( some value from e1 ), 
    val2 ( some value from e1 );
}

我也应该可以根据条件更改val1的值。

这在Java中怎么可能?

4 个答案:

答案 0 :(得分:7)

枚举基本上是Java中的类,所以你可以创建一个属性:

public enum E2 {
  VAL1(E1.VALUE1),
  VAL2(E2.VALUE2);

  public final E1 e1Value;

  E2(E1 e1Value) {
    this.e1Value = e1Value;
  }
}

可以e1Value制作一个getter / setter,但我强烈阻止这一点。虽然技术上没有任何东西可以阻止你在枚举中创建一个可修改的字段,但这是非常不寻常和意外的,导致混乱和/或微妙的错误。

答案 1 :(得分:3)

您可以这样做:

public enum E1 {
    A, B;
}

然后:

public enum E2 {
    C(E1.A), D(E1.B);

    private final E1 e1;

    private E2(E1 e1) {
        this.e1 = e1;
    }

    public E1 getE1() {
        return e1;
    }
}

答案 2 :(得分:2)

如果您提供构造函数,则可以在Enum中拥有成员变量:

    public enum e2{
        A2(e1.B1),
        B2(e1.B1),
        C2(e1.A1);

        e1 e1Value;

        e2(e1 e1NewValue){
            e1Value = e1NewValue;
        }
    }

    public enum e1{
        A1, B1;
    }

答案 3 :(得分:1)

可变的枚举,哎哟。技术上可行,但我建议反对它。如果它在初始化时只有一个时间值,那么它就完美无缺。

public enum e1{
        value1("1"), 
        value2("2");

        String val;
        private e1(String v) {
            val = v;
        }

        //bad don't use
        public void setValue(String v){
            val = v;
        }

        public String getValue(){
            return val;
        }
    }
//usage
e1.value1.setValue("3");
e1.value1.setValue("4");