Cet article étudie principalement le contenu pertinent de l'énumaire au lieu du domaine bit en Java, comme détaillé ci-dessous.
Notes de lecture "Efficace Java Chinese Version 2"
La notation du domaine bit permet à des opérations de bit d'être effectuées efficacement telles que l'union et l'intersection. Mais le domaine bit a tous les inconvénients de toujours illuminer l'énumération int, et encore plus. Lorsque le Bitfield est imprimé sous une forme numérique, il est beaucoup plus difficile de traduire une constante d'énumération INT simple. Même il n'y a pas de moyen facile de parcourir tous les éléments représentés par un Bitfield.
// Bit Field Énumération Constante - ObsoleTepublic Class Test {public static final byte style_bold = 1 << 0; // 1 public static final byte style_italic = 1 << 1; // 2 public static final byte style_underline = 1 << 2; // 4 public static final byte style_strikethrough = 1 << 3; // 6 // Le paramètre est bit ou de zéro ou plus de style_ Constantes publics void applaiterStyles (int styles) {...}}Le package Java.util fournit la classe Enumset pour représenter efficacement plusieurs collections de plusieurs valeurs extraites d'un seul type d'énumération. Cette classe met en œuvre l'interface définie, fournissant des fonctionnalités riches, une sécurité de type et une interopérabilité qui peuvent être obtenues à partir de toute autre implémentation d'ensemble. Cependant, dans l'implémentation spécifique interne, chaque contenu d'énumset est représenté comme un vecteur bit. Si le type d'énumération sous-jacent a 64 éléments ou moins - la plupart d'entre eux le sont. L'ensemble entier est représenté par un seul long, donc ses performances sont meilleures que les performances du domaine supérieur. Le traitement par lots, tel que RemoveAll et Retainall, est implémenté à l'aide d'algorithmes de bits. Tout comme le remplacement manuel des domaines bit. Mais vous pouvez éviter les erreurs sujettes aux opérations manuelles et au code moins élégant, car Enumset fait cette tâche difficile pour vous. '
// ENUMSET - Un remplacement moderne pour le texte de classe Fieldspublic {public Enum Style {Bold, italic, soulignement, strikethrough}; // n'importe quel ensemble pourrait être transmis, mais Enumset est clairement le meilleur public Void ApplicationStyles (Set <style> Styles) {System.out.println (styles); } public void test () {applicableStyles (enumset.of (style.bold, style.italic)); }} Exécuter test() et sortie [BOLD, ITALIC] .
La classe Enumset combine les avantages de simplicité et de performance des domaines bit et de tous les avantages des types d'énumération, il n'y a donc aucune raison d'utiliser à nouveau la notation du domaine bit. À moins que ce soit un domaine qui constitue un protocole de communication.
Mais en fait, Enumset a également un désavantage - il ne peut pas créer un énum immuable, mais nous pouvons encapsuler l'énumaire avec des collections.
public void test () {enumset <style> styles = enumset.of (style.bold, style.italic); Set <ystyle> Unmodifiableyle = CollectionS.UnModifiablesEt (styles); unmodifiageyle.add (style.underline);}De cette façon, si vous ajoutez des éléments au Unmodifiableset, vous signalerez java.lang.unsupportedOperationException
Résumer
Ce qui précède est toute l'explication détaillée de Enumset au lieu du code Bitfield en Java. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!