Javaの基礎チュートリアル:列挙型
列挙型
列挙値は、類似の特性を有する方法が一緒にまとめられているされています。たとえば、私たちは、列挙型として、日曜日、列挙型に虹のデザインの7色を月曜日を設計することができます。
一定の実現が列挙します
次のように我々は、一定の方法を定義することで、次の操作を行います。
静的クラスRainbowColor {公共
赤七色//、橙黄緑、青紫色の定数が定義され
パブリック静的INT最終RED = 0;
パブリックstatic int型ORANGE =最終1;
2 = INTファイナルイエローパブリック静的;
パブリックstatic int型ファイナルGREEN 3 =。 ;
パブリック静的int型シアン=ファイナル4;
公共の静的INT BLUE =ファイナル5;
ファイナル=パブリックstatic int型PURPLE 6;
}
私たちは、直接プログラムにRainbowColor.XXXXすることにより、これらの定数を参照することができます。
列挙定数は問題があると認識します
- 指の意味の種類:色の列挙値は何の意味なし整数値のほんの一部であるため、実行時にデバッグ場合、あなたは多くのマジックナンバーがログに記録があることがわかりますが、他の人から離れて、プログラマ自身が理解することは困難ですその謎。
- 安全でないタイプ:色値の整数型であるので、それは、それは不正パラメータがすべてのプログラムが実行されて送られてもよいです。
- 名前空間:あなたが持っている財産の色定数クラスは、クラスを介してアクセスするために使用するという理由だけで。
- 列挙値が変化すると、すべての導入は、列挙値のコードの一部を再コンパイルする必要があります。"
ENUMキーワード
Javaの5.0は、enumキーワードの後に言語列挙型のレベルの増加を導入しました。今度は、列挙型虹色の値を定義しましょう
列挙RainbowColor {
赤、オレンジ、黄、緑、シアン、青、紫
}
上記の定義から、それは単にプラスチック製のオブジェクトに値を変換しないで、Javaの列挙型は単純ですが、実際には、Java言語仕様は、機能の種類は非常に強力である列挙と思われますが、作品完全に機能するクラス定義に型定義について。膨張のこのタイプのすべての属性およびメソッドを追加するために、列挙型開発者の定義を可能にするには、任意のインターフェイスで実装されてもよいです。また、Javaはまた、通常の状況下で、開発者は、これらの詳細については気にしないことができ、そのようなデフォルトの実装などの高品質な列挙型、同等とSerializableインタフェースを実現するためのプラットフォームを提供します。
switchステートメントを使用します
列挙型の1つの効果はswitch文の使用の範囲を拡大することです。5.0より前に、スイッチでのJavaの値は列挙型では、オブジェクトを使用することができ、そのようなint型、バイト、ショート、文字の後のような単純なタイプとすることができます。その結果、選択プロセスの制御がより便利になり、
7日間のタイプ列挙週の//定義
パブリック列挙{WeekDayEnum月、火、水、木、金、土、日}
情報当日お読み//
WeekDayEnum今日readToday =を();
//選択された活動の日付に応じて
スイッチ(今日){
月:;; BREAK何かやる
; BREAK何かの操作を行います。火は
何かを、BREAK;:水は
木が:何かやる; BREAK;
金を:何かやる; BREAK;
土を:スポーツゲームをプレイ; BREAK;
日は:持っているがREST A; BREAK;
}
カスタム列挙型
あなたが列挙型、いくつかの複雑な機能を追加する必要がある場合、また、同様のクラス定義を列挙するためにカスタマイズすることができます。次のような増加所与のenum型などのプロパティを定義することができます。
列挙型WeekDayEnum {
月( "EAT")、
火( "FLY")、
水( "SLEEP")、
木( "SWIM")、
金( "STUDY")、
土( "SIT")、
日( "SEE" );
//列挙オブジェクトのプライベートプロパティ
プライベート文字列シング;
//列挙オブジェクトコンストラクタ
プライベートWeekDayEnum(文字列シング){
this.thing =シング;
}
オブジェクトをカスタマイズするため//列挙方法
パブリックストリングgetThing(){
シングを返します。
}
}
しかし、そこにいくつかの異なる場所があり、クラス定義に注意する必要があります。
- 施工方法は、公開または保護することはできません
- 最後に、後続のコード列挙値が離間セミコロン
列挙型クラスのツール
JDK5.0の列挙型クラスの増加が、また、2つのツールを追加EnumSetのとEnumMapは、これらの二つのカテゴリーは、java.utilパッケージに配置されています。どちらも、同じ操作を設定し、伝統的な地図の両方を使用します。
サブセットを取得します。
EnumSetの<WeekDayEnum>サブセット= EnumSet.of(WeekDayEnum.Mon、WeekDayEnum.Wed)。
(WeekDayEnum日:サブセット)のために{
のSystem.out.println(日)。
}
地図
// EnumMapオブジェクトマッピングテーブルの主キーは列挙型日付で定義し、色の値が列挙されているタイプ
のプライベート静的な地図<WeekDayEnum、RainbowColor> =スキーマの
新しい新しいEnumMap <WeekDayEnum、RainbowColor>(WeekDayEnum.class);
のため(int型I = 0; I)が(I ++は;.長)WeekDayEnum.valuesを<{
schema.put(WeekDayEnum.values()[I]、RainbowColor.values()を[I]);
}
参考リンク
- https://www.ibm.com/developerworks/cn/java/j-lo-enum/index.html
- https://blog.csdn.net/qq_27093465/article/details/52180865