Estoy de acuerdo con Michael Borgwardt y Jon Skeet que vale la pena mirar un EnumSet
. Hubiera elegido EnumSet
en operaciones bit a bit como las que tiene, por lo que demostraré cómo usar EnumSet
.
Parece que tu
Character
enumeración
(vamos a llamarlo CharEnum
de ahora en adelante) CharEnum
está siendo utilizado como un campo de bits, donde cada enumeración tiene un valor entero con juego de un solo bit:
A = 00000000 00000000 00000000 00000001
B = 00000000 00000000 00000000 00000010
C = 00000000 00000000 00000000 00000100
D = 00000000 00000000 00000000 00001000
Esto es muy similar a lo que hace un EnumSet
; tiene un vector de bits interno que asigna automáticamente cada enumeración a un bit en un long
. A medida que el Javadoc de que dice, "El rendimiento de espacio y tiempo de esta clase debe ser lo suficientemente bueno como para permitir su uso como una alta calidad, typesafe alternativa a los tradicionales basados en int 'indicadores de bits.'
es una continuación ejemplo de cómo usarlo
public enum CharEnum {
A, B, C, D;
}
y luego
EnumSet<CharEnum> ch = /* from user */
if (ch.contains(CharEnum.A)) {
// some operation...
}
No hay necesidad de especificar los bits en cualquier lugar, por lo que es mucho más simple código!
Una advertencia: esto solo funciona porque los valores enumerados en su ejemplo de C# tienen solo un bit establecido cada uno. Si usted tenía un valor de enumeración como esto:
E = 00011000 01110111 11100101 10000101
a continuación, un EnumSet
no sería apropiado. En ese caso, debería ver una de las otras respuestas aquí.
Debe agregar algunos paréntesis allí: 'if ((ch.getMask() & CharEnum.A.getMask())> 0)' –
@True Soft: Reparado, gracias. –