JavaのEnumSetは、ビットドメインコードの代わりに詳しく説明します。


本研究の主な内容はJavaのEnumSetがビット領域に代わるものであり、具体的には以下の通りである。
読書ノート「Effective Java中国語版第2版」
ビット領域表示法は、ビット操作を利用して、先unionとインターアクションという集合動作を効果的に実行することができる。しかし、ビット領域にはintエニュメレーションの欠点があり、さらに多くあります。ビット領域がデジタル形式で印刷される場合、翻訳ビット領域は翻訳よりも簡単なintエニュメレート・定数の方がはるかに難しいです。さらに、ビット領域表現のすべての要素を遍歴するには容易な方法がない。

//Bit field enumeration constant - OBSOLETE
public 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

  //Parameter is bitwise OR of zero or more STYLE_ constants
  public void applyStyles(int styles) { ... }
}
java.utilパケットは、単一のエニュメレーションタイプから抽出された複数の値の複数のセットを効果的に表すために、EnumSetクラスを提供する。このクラスはSetインターフェースを実現し、豊富な機能、タイプのセキュリティ、および他の任意のSet実装から得られる相互作用を提供する。しかし、内部の具体的な実装においては、各EnumSetの内容はビットベクトルとして表される。最下層のエニュメレート・タイプが64個以上あると、より少ない元素――その多くがそうである。全体のEnumSetは単一longで表現されており、その性能比の上位ドメインの性能を示しています。バッチ処理は,例えばremoveAllとretainAllのように,ビットアルゴリズムを用いて実行される。ビット領域の代わりに手作りで実現したように。しかし、手作業の際に発生しやすいミスや、あまり見栄えのしないコードを避けることができます。

//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) { 
    System.out.println(styles);
  }

  public void test() {
    applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
  }
}
test() を実行して、[BOLD, ITALIC] を出力します。
EnumSet類のビット領域の簡潔さと性能の優位性、エニュメレート・タイプのすべての長所は同じであるため、ビット領域表示法を使う理由がない。通信プロトコルフィールドを構成しない限り。
しかし、実際にはEnumSetにも可変のEnumSetを作ることができないという欠点があります。しかし、私たちはCollection.unmodifiable SetでEnumSetをカプセル化することができます。でも、簡潔性と性能は影響されます。

public void test() {
  EnumSet<Style> styles = EnumSet.of(Style.BOLD, Style.ITALIC);
  Set<Style> unmodifiableStyle = Collections.unmodifiableSet(styles);
  unmodifiableStyle.add(Style.UNDERLINE);
}
このようにunmodifiable Setに要素を追加するとjava.lang.UnipportedOperation Exceptionに報告されます。
締め括りをつける
以上はJavaのEnumSetがビットドメインコードの代わりに詳しく説明した内容についてです。ご協力をお願いします。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。