Ceci est une autre option, qui est similaire à la solution ordinale, sauf que vous pouvez utiliser le | et & opérateurs avec ceci:
public enum Permissions {
CanBlah1(1),
CanBlah2(2),
CanBlah3(4);
public int value;
Permissions(int value) {
this.value = value;
}
public int value() {
return value;
}
}
public static void main(String[] args) {
int userPerm = Permissions.CanBlah1.value() | Permissions.CanBlah2.value();
// check permssions
//
if((userPerm & Permissions.CanBlah1.value()) == Permissions.CanBlah1.value())
{
// do something
}
}
ou:
public enum Permissions {
CanBlah1,
CanBlah2,
CanBlah3;
public int value() {
return 1<<ordinal();
}
}
public static void main(String[] args) {
int userPerm = Permissions.CanBlah1.value() | Permissions.CanBlah2.value();
// check permssions
//
if((userPerm & Permissions.CanBlah1.value()) == Permissions.CanBlah1.value())
{
// do something
}
}
Et, bien sûr, EnumSet est implémenté comme un masque de bits sous le capot. – Ross
Ils sont. Il utilise 'long' pour jusqu'à 64 tableaux d'octets' Enums', appelés 'JubmoSet'. –