Les meilleures pratiques de l'utilisation de drapeaux dans la méthode Java

Quelle est la meilleure pratique pour la spécification des indicateurs dans une méthode en Java?

J'ai vu SWT l'aide d'int comme bitfields, comme:

(exemple partiellement de "Effective Java, 2nd Ed." page 159):

public class Text {
  public static final int STYLE_BOLD = 1 << 0; //1
  public static final int STYLE_ITALIC = 1 << 1; //2

  void printText(String text, int flags) {

  }
}

et votre client appel ressemble:

printText("hello", Text.STYLE_BOLD | Text.STYLE_ITALIC);

..mais c'est pas recommandée, car vous pouvez mixtes drapeaux (int valeur) de différentes classes d'ensemble sans compilateur vérifie.

Dans le même livre ("Effective Java"), je vois l'utilisation de EnumSet, mais alors votre appel utilisateur devient:

printText("hello", EnumSet.of(Style.Bold, Style.ITALIC));

Je trouve cela un peu verbeux et je préfère l'élégance de SWT.

Est-il une autre solution ou est-ce fondamentalement, les deux saveurs que vous devez choisir?

Je pense que tu veux dire STYLE_ITALIC = 1 << 1.
Je pense que c'est une grande démonstration d'un problème commun avec le champ de bits approche!
Oui en effet il est. 🙂
Merci @VictorZamanian j'ai mis à jour la question
Que trouvez-vous de "commentaires" sur le second? C'est un seul caractère plus longtemps. Que trouvez-vous de "élégant" à propos de la première? Tout ce qu'il fait est de jeter un type de la sécurité - il n'y a rien d'élégant.

OriginalL'auteur Roalt | 2011-05-20