Comment utiliser enum avec groupement et sous-groupement hiérarchie / imbrication
j'ai un enum 'classe'Example comme suit:
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;
}
c'est important pour mon projet que tous les enums avec lesquels je travaille appartiennent à Example (puisque c'est un argument dans un constructeur d'une classe).
comment utiliser enum hiérarchie et d'imbrication dans le but d'atteindre les objectifs suivants:
Une méthode qui teste si un
enumest du groupe A, B ou C. par exemple, quelque chose commeExample.enumA1.isGroupBelonging(Group.A)ouisGroupBelonging(Example.enumA1,Group.A)serait une méthode publique qui renvoie la valeur true.Être capable de faire la même chose avec les sous-groupes du groupe
A,BetC. Par exemple, le groupe A pourrait avoir des sous-groupesa,betc. Je veux une méthode qui fait quelque chose commeExample.enumA1.isSubGroupBelonging(SubGroup.a)est unpublic boolean.Une façon de faire tout cela sans avoir besoin d'avoir quelques élaborer
enumnom qui bloque mon code. Par exemple, il serait agréable de pouvoir se référer àExample.enumA1tout au long de mes autres cours sans avoir besoin de s'y référer en utilisant quelque chose commeExample.enumA1(Group.A,SubGroup.a)ouExample.enumA1.Group.A.SubGroup.a
2 réponses
j'utiliserais un constructeur enum très simple qui associe le groupe correspondant avec la valeur enum:
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;
}
}
Utilisation:
import static Example.*;
import Example.Group;
...
ENUM_A1.isInGroup(Group.A); // true
ENUM_A1.isInGroup(Group.B); // false
pour faire les sous-groupes vous pouvez faire un type similaire de structure pour le groupe comme par exemple, en utilisant Group(SubGroup ... subgroups) comme un constructeur et un EnumSet<SubGroup> pour contenir les sous-groupes.
Vous pouvez utiliser EnumSet pour grouper plusieurs énums sans créer un Enum catégorie:
public enum Example {
ENUM_A1, ENUM_A2, ENUM_A3,
ENUM_B1, ENUM_B2, ENUM_B3,
ENUM_C1, ENUM_C2, ENUM_C3;
public static EnumSet<Example> groupA = EnumSet.of(ENUM_A1, ENUM_A2, ENUM_A3);
public static EnumSet<Example> groupB = EnumSet.of(ENUM_B1, ENUM_B2, ENUM_B3);
public static EnumSet<Example> 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");
}
}