uso para numerico hora formato formatear example como java bitmask

para - textfield mask java



crear una máscara de bits de permiso en java (5)

Quiero hacer algo como esto:

public enum Permissions { CanBlah1, CanBlah2, CanBlah3 } byte[] userPerm = Permissions.CanBlah1 | Permissions.CanBlah2; // check permssions // if(userPerm && Permissions.CanBlah1 == Permissions.CanBlah1) { // do something }

¿Puedes hacer esto en Java así? (Vengo de ac # background)


Esta es otra opción, que es similar a la solución ordinal, excepto que puede usar el | y & operadores con esto:

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 } }

o:

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 } }


Por lo que sé, el operador bitwise no está definido para los tipos de enumeración


Puedes hacerlo fácilmente usando EnumSet

import java.util.EnumSet; import static java.util.EnumSet.of; import static java.util.EnumSet.range; import static so.User.Permissions.CanBlah1; import static so.User.Permissions.CanBlah2; import static so.User.Permissions.CanBlah3; public class User { public enum Permissions { CanBlah1, CanBlah2, CanBlah3 } public static void main(String[] args) throws Exception { EnumSet<Permissions> userPerms = of(CanBlah1, CanBlah2); System.out.println(userPerms.contains(CanBlah1)); //true System.out.println(userPerms.contains(CanBlah2)); //true System.out.println(userPerms.contains(CanBlah3)); //false System.out.println(userPerms.containsAll(of(CanBlah1, CanBlah3))); //false System.out.println(userPerms.containsAll(range(CanBlah1, CanBlah2))); //true System.out.println(userPerms.containsAll(range(CanBlah1, CanBlah3))); //false } }


Si bien no lo recomendaría, puede solicitar el ordinal () de una enumeración y usarlo para operaciones de bits. Por supuesto, ya que no puede definir qué es el ordinal para una enumeración, debe insertar valores falsos para obtener los ordinales correctos.

enum Example { Bogus, --> 0 This, --> 1 That, --> 2 ThisOrThat --> 3 };

Observe que se necesita introducir una enumeración Bogus para que

ThisOrThat.ordinal() == This.ordinal() | That.ordinal()


Si te quedaste atrapado en la pre Java 7 Era (Android) puedes probar el siguiente código:

public enum STUFF_TO_BIT_BASK { THIS,THAT,OTHER; public static int getBitMask(STUFF_TO_BIT_BASK... masks) { int res = 0; for (STUFF_TO_BIT_BASK cap : masks) { res |= (int) Math.pow(2, cap.ordinal()); } return res; } public boolean is(int maskToCheck){ return maskToCheck | (int) Math.pow(2, this.ordinal()); }

}