将独立状态设置为Java枚举值

3

我相对于Java中的枚举还比较陌生,现在我正在尝试实现一个枚举列表,其中每个值都有与之相关联的True/False值。我的枚举列表基本上看起来像这样:

public enum SomeEnum{
    A("A"),
    B("B"),
    C("C"),
    D("D");
    private String name;
    private SomeEnum(String name){
    this.name = name;
    }
}

然而,我希望每个枚举值都有一个与之相关的“TRUE”或“FALSE”。在Java枚举中是否可行?还是需要不使用枚举来解决它。最终,我想拥有一些setter/getter方法来独立设置和获取每个状态。
谢谢!
编辑:抱歉让您感到困惑,我没有完全清楚自己想要做什么。我正在为DDS创建消息集,并希望为显示分别为TRUE或FALSE的状态消息面板创建消息集,并且可以更改。我认为我可以使用枚举来完成这个任务,而不是创建每个变量的单独实例。

在您的情况下,如果名称与枚举值之一相同,则无需提供名称。您可以通过SomeEnum.A.name()访问它。 - Marcin Pietraszek
4个回答

4

简短回答:取决于您的使用情况。以下是一个完全合理的示例:

public enum SomeEnum{
    A(true),
    B(false),
    C(true),
    D(false);

    private boolean myBool;

    private SomeEnum(boolean myBool){
        this.myBool = myBool;
    }

    public boolean geMyBool() {
        return myBool;
    }
}

不要将name用作字段名称,因为在Java中,枚举值的名称(AB等)的String表示形式被用作所有enum值的name。例如,SomeEnum.A.getName()等于"A"。这个功能适用于所有的枚举。
另外,请注意,如果设置myBool的值,它会使枚举的用户感到困惑,因为运行时状态与源代码中存在的值不一致。

谢谢你的回答!不过,能否使用枚举并覆盖每个枚举的布尔值呢?据我所知,在枚举列表中设置 true/false 布尔值时是静态/最终的。是否可能有一个外部变量来分别分配给每个枚举? - KyleKW
@KyleKW,你能添加一些伪代码来展示你想用这些枚举做什么吗? - Alex Klimashevsky
我修正了我的回答。如果你能分享一下你的使用情况就太好了。 - Adam Arold
通常情况下,如果你想要改变东西,你不应该使用枚举。 - Adam Arold

0
public enum SomeEnum{
    A("A", true),
    B("B", false),
    C("C", false),
    D("D", true);

    private String name;
    private boolean isImportant;

    private SomeEnum(String name, boolean isImportant){
        this.name = name;
        this.isImportant = isImportant;
    }

}


太棒了,Alex。你怎么获取那个isImportant标志的值?你需要添加一个getter方法来获取它。 - Michael Gantman

0
你已经接近解决方案了,只需在构造函数中添加一个新参数即可。
public enum SomeEnum{ 
    A("A", true),
    B("B", false),
    C("C", true),
    D("D", false);

    private String name;
    private boolean flag;

    private SomeEnum(String name, boolean flag){
    this.name = name;
    this.flag = flag;
    }  
} 

0

答案是肯定的,而且很容易实现。

    public enum SomeEnum{
    A(true),
    B(false),
    C(true),
    D(false);
    private boolean flag;
    private SomeEnum(boolean flag){
      this.flag = flag;
    }

    public boolean getFlag() {
      return flag;
    }
}

此外,您不需要进行名称变量,因为枚举已经有一个名为name()的方法,它会返回表示实例名称的字符串。如果您想要不同的字符串,请覆盖toString()方法并使用它来获取与枚举实例名称不同的字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接