Javaの基本的なレビュー-列挙型クラスとアノテーション

列挙型クラス

定数のセットを定義する必要がある場合、列挙型クラスを使用することがよくあります。

使用法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 =」は省略できます。
  • メンバー定義のないアノテーションはタグと呼ばれ、メンバー変数を含むアノテーションはメタデータ
    アノテーションと呼ばれます。

おすすめ

転載: blog.csdn.net/qq_41262903/article/details/104485748