Javaの注釈とは何ですか? 注釈の使用方法 (21)

Java のアノテーションは一種のメタデータ、つまりコードを記述するデータです。注釈を使用して、作成者、バージョン、関数、ドキュメントなど、クラス、メソッド、フィールド、パラメーターなどに追加情報を追加できます。注釈は、コンパイル時のチェック、ランタイム処理、ドキュメントの生成など、コードの動作を変更するためにも使用できます。注釈は、コードをより簡潔にし、柔軟性を高め、保守を容易にする非常に強力なツールです。

注釈を使用するには、最初に注釈タイプを定義する必要があります。注釈型は、@interface キーワードで宣言された特別な種類のインターフェイスです。注釈型のメンバーは、注釈のプロパティを表すデフォルト値を持つメソッドです。たとえば、作成者とバージョンの情報を定義する注釈タイプは次のとおりです。

@interface Author {
    
    
    String name(); // 注解属性 name
    String version() default "1.0"; // 注解属性 version,默认值为 "1.0"
}

注釈タイプを定義したら、その注釈をコードで使用できます。注釈を使用するための構文は、ターゲット要素の前に @ 注釈名を追加し、属性値を括弧で囲むことです。たとえば、Author で注釈が付けられたクラスを次に示します。

@Author(name = "Alice", version = "2.0") // 使用 Author 注解,并指定属性值
public class Hello {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("Hello, world!");
    }
}

アノテーションを使用した後、コンパイル時または実行時にアノテーションの情報を取得できます。アノテーション情報を取得するには、リフレクション メカニズムを使用する必要があります。つまり、Class、Method、および Field などのクラスによって提供されるメソッドを介してコードのメタデータにアクセスします。たとえば、以下は Author アノテーション情報を取得して出力するメソッドです。

public static void printAuthorInfo(Class<?> clazz) {
    
    
    // 判断类是否有 Author 注解
    if (clazz.isAnnotationPresent(Author.class)) {
    
    
        // 获取 Author 注解对象
        Author author = clazz.getAnnotation(Author.class);
        // 获取并打印 Author 注解的属性值
        System.out.println("Author name: " + author.name());
        System.out.println("Author version: " + author.version());
    } else {
    
    
        System.out.println("No Author annotation found.");
    }
}

このメソッドを呼び出して Hello クラスをパラメーターとして渡すと、次のように出力されます。

Author name: Alice
Author version: 2.0

カスタム注釈タイプに加えて、Java は @Override、@Deprecated、@SuppressWarnings などの組み込み注釈タイプも提供します。これらの注釈を使用して、コンパイラまたはランタイム環境にコードの特別な処理を行うように指示できます。たとえば、@Override アノテーションを使用して、メソッドが親クラスまたはインターフェイスのメソッドをオーバーライドし、それがカバーされていない場合はエラーが報告されることを示すことができます; @Deprecated アノテーションを使用して、メソッドが親クラスまたはインターフェイスであることを示すことができます。時代遅れであり、推奨されません; @SuppressWarnings アノテーションを使用できます コンパイラの警告などを抑制します。

要約すると、Java の注釈は、コードをより表現力豊かで柔軟にする非常に便利な機能です。アノテーションを定義して使用することで、フレームワーク開発、単体テスト、依存性注入など、多くの高度な機能を実現できます。

おすすめ

転載: blog.csdn.net/Dakaring/article/details/130520429