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
enum
est 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
,B
etC
. Par exemple, le groupe A pourrait avoir des sous-groupesa
,b
etc
. 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
enum
nom qui bloque mon code. Par exemple, il serait agréable de pouvoir se référer àExample.enumA1
tout 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");
}
}