0

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

枚举 1

public enum e1{
    value1, 
    value2;
}

枚举 2

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

我还应该能够val1根据条件更改稍后的值。

这在 Java 中怎么可能?

4

4 回答 4

7

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

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

  public final E1 e1Value;

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

可以为 制作一个 getter/setter e1Value,但我强烈反对这样做。虽然在技术上没有什么能阻止您在枚举中创建可修改的字段,但这是非常不寻常和出乎意料的,并且导致令人困惑和/或微妙的错误。

于 2013-09-12T09:00:08.037 回答
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;
    }
}
于 2013-09-12T08:59:39.547 回答
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;
    }
于 2013-09-12T09:03:42.237 回答
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");
于 2013-09-12T09:01:01.273 回答