我有一个enum“班级”,称为Example:
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的公共方法。
Example.enumA1.isGroupBelonging(Group.A)
isGroupBelonging(Example.enumA1,Group.A)
能够做同样的事情组的子组A,B和C。例如,A组可能有子组a,b和c。然后,我想要一个做某事的方法,例如Example.enumA1.isSubGroupBelonging(SubGroup.a)which public boolean。
A
B
C
a
b
c
Example.enumA1.isSubGroupBelonging(SubGroup.a)
public boolean
一种无需所有复杂enum名称即可完成所有代码的方法。例如,最好能够Example.enumA1在我的其他所有类中进行引用,而无需使用诸如Example.enumA1(Group.A,SubGroup.a)或Example.enumA1.Group.A.SubGroup.a
Example.enumA1
Example.enumA1(Group.A,SubGroup.a)
Example.enumA1.Group.A.SubGroup.a
我将使用一个非常简单的枚举构造函数,该构造函数将相应的组与枚举值相关联:
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>包含分组。
Group(SubGroup ... subgroups)
EnumSet<SubGroup>