一尘不染

如何将枚举与分组和子分组层次结构/嵌套一起使用

java

我有一个enum“班级”,称为Example

enum Example {
//enums belonging to group A:
   enumA1,
   enumA2,
   enumA3,
//enums belonging to group B:
   enumB1,
   enumB2,
   enumB3,
//enums belonging to group C:
   enumC1,
   enumC2,
   enumC3;
}

对于我的项目而言,它们所涉及的所有枚举都非常重要Example(因为这是类的构造函数中的一个参数)。

我如何使用enum层次结构/嵌套来实现以下目的:

  • 一种测试an enum是否属于A,B或C组的方法。例如,类似于Example.enumA1.isGroupBelonging(Group.A)isGroupBelonging(Example.enumA1,Group.A)将是返回true的公共方法。

  • 能够做同样的事情组的子组ABC。例如,A组可能有子组abc。然后,我想要一个做某事的方法,例如Example.enumA1.isSubGroupBelonging(SubGroup.a)which public boolean

  • 一种无需所有复杂enum名称即可完成所有代码的方法。例如,最好能够Example.enumA1在我的其他所有类中进行引用,而无需使用诸如Example.enumA1(Group.A,SubGroup.a)Example.enumA1.Group.A.SubGroup.a


阅读 458

收藏
2020-12-03

共1个答案

一尘不染

我将使用一个非常简单的枚举构造函数,该构造函数将相应的组与枚举值相关联:

public enum Example {

    ENUM_A1 (Group.A),
    ENUM_A2 (Group.A),
    ENUM_A3 (Group.A),

    ENUM_B1 (Group.B),
    ENUM_B2 (Group.B),
    ENUM_B3 (Group.B),

    ENUM_C1 (Group.C),
    ENUM_C2 (Group.C),
    ENUM_C3 (Group.C);

    private Group group;

    Example(Group group) {
        this.group = group;
    }

    public boolean isInGroup(Group group) {
        return this.group == group;
    }

    public enum Group {
        A,
        B,
        C;
    }
}

用法:

import static Example.*;
import Example.Group;
...

ENUM_A1.isInGroup(Group.A);  // true
ENUM_A1.isInGroup(Group.B);  // false

要进行分组,您可以使用与示例相同的Group结构,将其Group(SubGroup ... subgroups)用作构造函数并EnumSet<SubGroup>包含分组。

2020-12-03