この記事では、主に、以下で詳述するように、JavaのBITドメインの代わりに列挙の関連コンテンツを研究しています。
メモを読む「効果的なJavaチャイニーズバージョン2」
ビットドメイン表記により、ユニオンや交差点など、ビット操作を効果的に実行できます。しかし、ビットドメインには、常に列挙を照らすことなどのすべての欠点があります。ビットフィールドがデジタル形式で印刷されている場合、単純なINT列挙定数を翻訳することがはるかに困難です。 Bitfieldが表すすべての要素を通過する簡単な方法はありません。
//ビットフィールド列挙定数-ObsoleTepublicクラステスト{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 //パラメーターはビットワイズまたはゼロ以上のスタイル_ constants public void applystyles(int styles){...}}java.utilパッケージは、enumsetクラスを提供して、単一の列挙タイプから抽出された複数の値の複数のコレクションを効果的に表します。このクラスは、セットインターフェイスを実装し、他のセット実装から取得できる豊富な機能、タイプの安全性、および相互運用性を提供します。ただし、内部固有の実装では、各列挙コンテンツはビットベクトルとして表されます。基礎となる列挙タイプの要素が64以下の場合 - それらのほとんどはそうです。列挙全体は単一の長いロングで表されるため、そのパフォーマンスは上部ドメインのパフォーマンスよりも優れています。 RemoveAllやRecipingなどのバッチ処理は、ビットアルゴリズムを使用して実装されます。ビットドメインを手動で交換するように。ただし、Enumsetはこの困難なタスクを実行するため、手動操作やエレガントでないコードが発生しやすいエラーを回避できます。 `
// enumset-ビットFieldspublicクラスのテキストの最新の代替品{public enum Style {Bold、Italic、Underline、Strikethrough}; //任意のセットを渡すことができますが、Enumsetは明らかに最高の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には不利な点もあります - 不変の列挙セットを作成することはできませんが、collections.unmodifiablesetでenumsetをカプセル化することはできますが、シンプルさとパフォーマンスの両方が影響を受けます。
public void test(){enumset <style> styles = enumset.of(style.bold、style.italic); set <style> unmodifiablestyle = collections.unmodifiableset(styles); unmodifiablestyle.add(style.underline);}このようにして、unmodifiablesetに要素を追加すると、java.lang.unsupportedoperationexceptionを報告します。
要約します
上記は、JavaのBitfieldコードの代わりに、Enumsetのすべての詳細な説明です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!