Java 为enum分配一个枚举值

Java 为enum分配一个枚举值,java,enums,Java,Enums,我想为枚举分配一个枚举值,如 枚举1 public enum e1{ value1, value2; } 枚举2 public enum e2{ val1 ( some value from e1 ), val2 ( some value from e1 ); } 我还应该能够在以后根据条件更改val1的值 在Java中这是怎么可能的?您可以这样做: public enum E1 { A, B; } 然后: public enum E2 {

我想为枚举分配一个枚举值,如

枚举1

public enum e1{
    value1, 
    value2;
}
枚举2

public enum e2{
    val1 ( some value from e1 ), 
    val2 ( some value from e1 );
}
我还应该能够在以后根据条件更改
val1
的值


在Java中这是怎么可能的?

您可以这样做:

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

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

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

  public final E1 e1Value;

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

您还可以为
e1Value
创建一个getter/setter,但我强烈反对这样做。虽然从技术上讲,没有什么能阻止您在枚举中创建可修改的字段,但这是非常不寻常和意外的,会导致混乱和/或微妙的错误。

可变枚举,哎哟。从技术上讲是可能的,但我建议不要这样做。如果它在初始化时只有一个时间值,那么它是完美的

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");

如果提供构造函数,则可以在枚举中包含成员变量:

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

        e1 e1Value;

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

    public enum e1{
        A1, B1;
    }

不能更改枚举。这就是为什么它们是enum…这个问题目前非常模糊-尤其是“我还应该能够更改val1的值”-你是什么意思?我也可以将val1的值从E1.VALUE1更改为E2.VALUE2吗?如果是,那怎么办?@AbhishekGoel:你读过最后一段吗?不是代码的那个?您可以通过编写setter(并使
e1Value
成为非final)来实现这一点,就像您对任何其他类所做的那样。但是,这真是个坏主意。如果您需要两个枚举之间的可变绑定,那么最好在映射的某个位置跟踪该绑定。