ほとんどのプログラミング言語では、列挙型は一般的に使用される必須のデータ型になりますが、Java ももちろん例外ではありません。ただし、Java の Enum 列挙型には予想外の用途がたくさんあります。以下を見てみましょう。
1. enum に変数とメソッドを追加できます
まずコード例を見てみましょう:
public enum State { Normal("正常态", 1), Update("已更新", 2), Deleted("已删除", 3), Fired("已屏蔽", 4); // 成员变量 private String name; private int index; // 构造方法,注意:构造方法不能为public,因为enum并不可以被实例化 private State(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (State c : State .values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
上記のコードから、列挙値を定義した後、その後ろにセミコロンを追加することがわかります。他の変数とメソッドを定義します。さらに、enum のコンストラクターはパブリックとしてマークできないことに注意してください。これは、ユーザーが enum をインスタンス化できないようにするためです。
2. 定数の定義に使用できます
まず、Java で定数を定義する方法を確認しましょう:
public static final int normalState = 1; private static final int updateState = 2;
上記の定数定義を置き換えるために enum 列挙を使用することもできます。以下:
public enum State { Normal, Update, Deleted, Fired }
Java で定数を定義するために enum を使用することに構文上の利点はありませんが、enum 列挙型はより多くの操作関数を提供できます。
3. enum にインターフェースを実装する
まずは次のコードを見てみましょう:
public interface ICanReadState { void read(); String getState(); } public enum State implements ICanReadState { Normal("正常态", 1), Update("已更新", 2), Deleted("已删除", 3), Fired("已屏蔽", 4); private String name; private int index; private State(String name, int index) { this.name = name; this.index = index; } // 接口方法1 @Override public String getState() { return this.name; } // 接口方法2 @Override public void read() { System.out.println(this.index + ":" + this.name); } }
一般的なクラスでインターフェースを使用するのと同じように、enum もインターフェースを継承し、インターフェース内のすべてのメソッドを実装できます。それは、列挙内の値に対する並べ替え、比較、その他の操作が簡単であり、カプセル化が優れているということです。
概要
端的に言うと、enum 列挙型は継承できない最終クラスです。上記の State 列挙型を例に挙げると、enum 型のバイトコードを見ると、それは実際にはクラスの静的定数です。状態タイプの。