Lorsque des éléments de type enum sont appliqués à un ensemble, dans l'ancien temps, le modèle int enum (Item34) était utilisé pour distribuer la puissance de 2 à chaque constante.
// Bit field enumeration constants - OBSOLETE!
public class Text {
public static final int STYLE_BOLD = 1 << 0; // 1
public static final int STYLE_ITALIC = 1 << 1; // 2
public static final int STYLE_UNDERLINE = 1 << 2; // 4
public static final int STYLE_STRIKETHROUGH = 1 << 3; // 8
// Parameter is bitwise OR of zero or more STYLE_ constants
public void applyStyles(int styles) { ... }
}
En appliquant une opération OR à ceux-ci, certains éléments ont été rassemblés dans un ensemble. (Champ de bits)
text.applyStyles(STYLE_BOLD | STYLE_ITALIC);
La jonction et le croisement peuvent également être réalisés par opération binaire, mais cette méthode hérite de tous les mauvais points de int enum.
Vous devez utiliser la classe EnumSet
pour créer un ensemble de constantes. Les performances sont comparables au traitement dans le domaine des bits.
L'exemple ci-dessus utilise enum et EnumSet ci-dessous.
// EnumSet - a modern replacement for bit fields
public class Text {
public enum Style { BOLD, ITALIC, UNDERLINE, STRIKETHROUGH }
// Any Set could be passed in, but EnumSet is clearly best
public void applyStyles(Set<Style> styles) { ... }
}
enumset
Le code côté client qui transmet l'instance est le suivant.
text.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
La méthode ci-dessus applyStyles
prend `` Set``` comme argument au lieu de
`ʻEnumSet. La plupart des utilisateurs passeront
EnumSet```, mais cela se fait selon le principe d'accepter une interface (Item64) plutôt que d'accepter une classe d'implémentation comme argument.
Recommended Posts