プロパティ
- いくつかの場合において、このようなオブジェクトのクラスの唯一四季この限定されたインスタンスを持つクラスのオブジェクトクラスシーズンは、固定されており、Javaで列挙クラスが呼び出されたときのように、限定されるものではなく、固定されました。
- 列挙クラス、そのステータスおよびクラス、同じインタフェースを定義するには、Javaの列挙型でキーワードを使用します。
- 列挙クラスは、通常のクラスは、独自のメンバ変数、メンバー・メソッド、コンストラクタ(唯一のプライベートアクセス修飾子を使用すると、コンストラクタを呼び出すために外部から不可能であることだけで建設中のコンストラクタ特別なクラスであります)とき列挙値と呼ばれています。
- Javaソースファイルだけでも、同じ列挙クラスでなければなりません列挙クラスのパブリック・タイプ、およびJavaソースファイルとクラス名の名前を持つことができ、そしてこのクラスは同じです。
- 使用列挙定義列挙クラスは、デフォルトjava.lang.Enumクラスを継承し、実装java.lang.Seriablizableとjava.lang.Comparableと二つのインターフェース。
- すべてのpublic static final値が列挙されており、非抽象クラスの子の列挙は、別のクラスを送信しません。
- すべての例(列挙値)列挙クラスは、明示的に最初の行の列挙クラスに記載されている必要があり、そうでなければ、これは列挙クラスのインスタンスを生成することはありません。これらの例は(列挙値)にリストされている場合、システムは自動的にのpublic static final変更が追加されます、プログラマが明示的に追加する必要はありません。
ライブ:
あなたがあなた自身の方法をカスタマイズする予定がある場合は、最終的に列挙型のインスタンスで直列化されるセミコロンを追加します。
列挙クラスのすべてがjava.lang.Enumから継承します。Javaは多重継承をサポートしていないので、その列挙オブジェクトが他のクラスから継承することはできません。
java.util.EnumSetとjava.util.EnumMapは2つの列挙されています。要素のコレクションを繰り返さない確保EnumSetの、EnumMap列挙型キーであるが、値の任意のタイプであってもよいです。2セットの使用についてあなたはJDKのドキュメントを参照することができ、ここでは触れません。
使用
クラスの定義
/**
* @author AganRun
* @date 2019/10/15
*/
public enum WeekEnum {
// 因为已经定义了带参数的构造器,所以在列出枚举值时必须传入对应的参数
SUNDAY("星期日"), MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"),
THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六");
// 定义一个 private 修饰的实例变量
private String date;
// 定义一个带参数的构造器,枚举类的构造器只能使用 private 修饰
WeekEnum(String date) {
this.date = date;
}
// 定义 get set 方法
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
@Override
public String toString() {
return date;
}}
列挙一般的な方法
- TのcompareTo(E O):列挙オブジェクトの配列比較を開発するために使用される方法は、同一のインスタンスが同じタイプの列挙列挙インスタンスと比較することができます。そうでない場合は負の整数;指定された列挙オブジェクトに列挙オブジェクトの後、それは正の整数を返し、そうでない場合、戻りゼロ。
@Test
public void testCompare(){
//-4
System.out.println(WeekEnum.MONDAY.compareTo(WeekEnum.FRIDAY));
}
- 文字列の名前は()の値を列挙この列挙インスタンスの名前を返します
- 静的値():すべての列挙値を含む配列を返し、すべての列挙された値を反復処理するために使用できます
- 文字列のtoString():名前の列挙値を返し、メソッド名が、より一般的に使用されると同様です
@Test
public void testNameValue(){
//MONDAY
System.out.println(WeekEnum.MONDAY.name());
//SUNDAY...SATURDAY,重写了ToString后变成星期日...星期六
Arrays.asList(WeekEnum.values()).forEach(System.out::println);
}
- int型の序数は()によって列挙値の順序に従って、列挙値の列挙型宣言の順序で、すなわち、(0から始まる)列挙クラスの宣言順序を列挙値のインデックスを返します
@Test
public void testOrdinal(){
System.out.println(WeekEnum.MONDAY.ordinal());
//0
System.out.println(WeekEnum.SUNDAY.ordinal());
}
- 静的のvalueOf():指定された名前を持つリターンに指定されたenum型のenum定数、名前は正確にタイプが余分な空白文字は許可されていない(識別子を使用し、この列挙定数の中で宣言一致している必要があります
@Test
public void testVauleOf(){
//报错
// System.out.println(WeekEnum.valueOf("星期一"));
//星期一(因为重写了toString)
System.out.println(WeekEnum.valueOf("MONDAY"));
//星期一
System.out.println(WeekEnum.valueOf(WeekEnum.class, "MONDAY"));
}