列挙型クラス
定数のセットを定義する必要がある場合、列挙型クラスを使用することがよくあります。
使用法1:定数
JDK1.5より前は、定数を次のように定義していました。publicstatic fianl...。これで、列挙型を使用すると、関連する定数を列挙型にグループ化でき、列挙型は定数よりも多くのメソッドを提供します。
public enum ColorEnum {
RED, GREEN, BLANK, YELLOW
}
使用法2:スイッチ
JDK1.6より前のswitchステートメントは、int、char、enumタイプのみをサポートします。列挙型を使用すると、コードが読みやすくなります。
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
使用法3:列挙に新しいメソッドを追加します
独自のメソッドをカスタマイズする場合は、列挙型インスタンスシーケンスの最後にセミコロンを追加する必要があります。また、Javaでは、最初に列挙型インスタンスを定義する必要があります。
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.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;
}
}
使用法5:インターフェースを実装する
すべての列挙は、java.lang.Enumクラスから継承されます。Javaは多重継承をサポートしていないため、列挙オブジェクトは他のクラスを継承できなくなりました。
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour{
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//接口方法
@Override
public String getInfo() {
return this.name;
}
//接口方法
@Override
public void print() {
System.out.println(this.index+":"+this.name);
}
}
使用法6:インターフェイスを使用して列挙を整理する
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
使用法7:列挙されたコレクションの使用について
java.util.EnumSet
合計java.util.EnumMap
は、2つの列挙されたコレクションです。EnumSetは、セット内の要素が繰り返されないようにします。EnumMapのキーは列挙型であり、値は任意の型にすることができます。これら2つのコレクションの使用については、ここでは繰り返しません。JDKのドキュメントを参照してください。
実装の詳細と列挙の原則については、以下を参照してください。
参考資料:「ThinkingInJava」第4版
注釈
前書き
- JDK 5.0以降、Javaは
注釈であるメタデータのサポートを追加しました。 - アノテーションは実際にはコード内の特別なタグです。これらのタグは、コンパイル、クラスのロード、および実行時に読み取ることができ、対応する処理を実行できます。注釈を有効にすることで、プログラマーは元のロジックを変更せずに、ソースファイルに補足情報を埋め込むことができます。コード分析ツール、開発ツール、および展開ツールは、これらの補足情報を通じて検証または展開できます。
一般的な注釈
@author複数の作成者との間で使用されるモジュールのこのタイプを開発著者は、分割示し
@versionは、モジュールのこの種のバージョンを示し
ている@see参照ステアリングを、関連するトピック
@sinceはどのバージョンから
@paramた追加Aにメソッド内のパラメーターパラメーターがない場合、メソッド
の戻り値を記述するために@returnを書き込むことはできません。メソッドの戻り値タイプがvoidの
場合、メソッドがスローする可能性のある例外を記述するために@exceptionを書き込むことはできません。メソッドがthrowsを使用して明示的にスローしない場合、例外を書き込むことはできません
@Override:親クラスメソッドのオーバーライドを制限します。このアノテーションはメソッドにのみ使用できます
@Deprecated:変更された要素(クラス、メソッドなど)が古くなっていることを示すために使用されます。通常、変更された構造が危険であるか、より適切な選択肢があるためです
@SuppressWarnings:コンパイラの警告を抑制します
カスタムアノテーション
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotation{
String value() default "myannotion";
}
JDKのメタアノテーション
- @interfaceキーワードを使用して、新しいアノテーションタイプを定義します
- カスタムアノテーションは、java.lang.annotation.Annotationインターフェースを自動的に継承します
- Annotationのメンバー変数は、Annotation定義でパラメーターなしのメソッドの形式で宣言されます。メソッド名と戻り値は、メンバーの名前とタイプを定義します。これを構成パラメーターと呼びます。タイプは、文字列タイプ、クラスタイプ、列挙型、注釈タイプ、
および上記のすべてのタイプの8つの基本データ型の配列のみにすることができます。 - 注釈メンバー変数を定義するときにその初期値を指定できます。また、defaultキーワードを使用して、メンバー変数の初期値を指定できます。
- パラメータメンバーが1つしかない場合は、パラメータ名の値を使用することをお勧めします
- 定義された注釈に構成パラメーターが含まれている場合、デフォルト
値がない限り、パラメーター値を使用するときに指定する必要があります。形式は「パラメーター名=パラメーター値」です。パラメーターメンバーが1つだけで、名前がvalueの場合、
「value =」は省略できます。 - メンバー定義のないアノテーションはタグと呼ばれ、メンバー変数を含むアノテーションはメタデータ
アノテーションと呼ばれます。