如何使用枚举与分组和子组层次结构/嵌套
我有一个名为Example
enum
“类”如下:
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
层次结构/嵌套来实现以下目的:
-
测试
enum
是否属于组A,B或C的方法。例如,像Example.enumA1.isGroupBelonging(Group.A)
或isGroupBelonging(Example.enumA1,Group.A)
这样的isGroupBelonging(Example.enumA1,Group.A)
方法将返回true 。 -
能够对
A
,B
和C
组的子组做同样的事情。 例如,组A可能具有子组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.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
来包含子组。
您可以使用EnumSet
对各种枚举进行分组,而无需创建单独的Enum
类:
public enum Example { ENUM_A1, ENUM_A2, ENUM_A3, ENUM_B1, ENUM_B2, ENUM_B3, ENUM_C1, ENUM_C2, ENUM_C3; public static EnumSet groupA = EnumSet.of(ENUM_A1, ENUM_A2, ENUM_A3); public static EnumSet groupB = EnumSet.of(ENUM_B1, ENUM_B2, ENUM_B3); public static EnumSet groupC = EnumSet.of(ENUM_C1, ENUM_C2, ENUM_C3); } public static void main(String[] args){ if(Example.groupA.contains(Example.ENUM_A1)){ System.out.println("Group A contains ENUM A1"); } }