Javaのアノテーション:タイプ、使用法、例

公開: 2022-05-19

Javaなどのプログラミング言語の注釈は、Javaのソースコードと統合できる構文メタデータを指します。 Javaパッケージ、変数、クラス、パラメーター、メソッドなどのさまざまな要素に注釈を付けることができます。 開発者は、Javadocタグと同様に、ソースファイルから直接Javaアノテーションを簡単に読み取ることができます。

Javaアノテーションは、Javaコンパイラの出力Javaクラスファイルに含めたり、そこから読み取ったりすることもできます。 これにより、Java仮想マシンはアノテーションを維持し、実行時にリフレクションを通じてそれらを読み取ることができます。 Javaでは、既存のメタ注釈からメタ注釈を作成することができます。

Javaのアノテーションの基本は次のとおりです。

  1. 注釈は常に「@」で始まります。 例:「@ override」、「@ target」、「@SuppressWarnings」など。
  2. 注釈は、コンパイルされたプログラムの動作には影響しません。
  3. アノテーションは、メタデータをメソッド、クラス、変数などのプログラムコンポーネントに関連付けるのに役立ちます。
  4. 注釈は、プログラムがコンパイラーによって処理される方法に影響を与える可能性があるため、単なるコメントではありません。 これらは、プログラムに関する追加のコンパイラ情報を提供しますが、プログラム自体の一部ではありません。 したがって、これらの注釈は、コンパイルされたプログラムの実行には影響しません。

目次

Javaのアノテーションの種類

1.単一値の注釈

単一値の注釈には、メンバーが1つしかないため、省略形は1つしか使用できません。 メンバーには、注釈の適用後に値を指定する必要があります。 ただし、注釈の名前を指定する必要はありません。 省略形を使用する場合は、メンバーに値が必要です。 例えば:

@TestAnnotation( "testing");

2.完全な注釈

完全な注釈は、データメンバー、値、ペア、名前などのさまざまなデータで構成されます。

例えば:

@TestAnnotation(owner =” Rahul”、value =” Class Geeks”)

世界のトップ大学からオンラインでソフトウェア開発コース学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを迅速に追跡します。

3.注釈の繰り返し

注釈を単一のオブジェクトに複数回適用できる場合、その注釈は繰り返し注釈としてラベル付けされます。 繰り返しのアノテーションは、java.lang.annotationパッケージで定義されている@Repeatableタグで指定されます。 その値フィールドは、繰り返される注釈のコンテナタイプを示します。

コンテナは、繰り返し注釈の配列を含む値フィールドを持つ注釈として定義されます。 繰り返しアノテーションを作成するには、最初にコンテナアノテーションを作成してから、@Repeatableアノテーションへの入力としてアノテーションタイプを指定します。

例えば:

//繰り返し可能なアノテーションを示すJavaプログラム

//必要なクラスをインポートする

インポートjava.lang.annotation.Annotation;

インポートjava.lang.annotation.Repeatable;

インポートjava.lang.annotation.Retention;

インポートjava.lang.annotation.RetentionPolicy;

import java.lang.reflect.Method;

//Wordsアノテーションを繰り返し可能にする

@Retention(RetentionPolicy.RUNTIME)

@Repeatable(MyRepeatedAnnos.class)

@interface Words

{{

文字列word()のデフォルトは「Hello」です。

int value()デフォルト0;

}

//コンテナアノテーションを作成します

@Retention(RetentionPolicy.RUNTIME)

@interface MyRepeatedAnnos

{{

Words [] value();

}

パブリッククラスメイン{

//newMethodで単語を繰り返す

@Words(word =“ First”、value = 1)

@Words(word =“ Second”、value = 2)

public static void newMethod()

{{

Main obj = new Main();

試す {

クラス<?> c = obj.getClass();

//newMethodのアノテーションを取得します

メソッドm=c.getMethod(“ newMethod”);

//繰り返される注釈を表示します

アノテーションanno

= m.getAnnotation(MyRepeatedAnnos.class);

System.out.println(anno);

}

catch(NoSuchMethodException e){

System.out.println(e);

}

}

public static void main(String [] args){newMethod(); }

}

最終的な出力は次のようになります:@MyRepeatedAnnos(value = {@ Words(value = 1、word =” First”)、@ Words(value = 2、word =” Second”)})

人気のソフトウェアエンジニアリングコースをご覧ください

SL。 いいえ ソフトウェア開発プログラム
1 LJMU&IIITBのコンピュータサイエンスの理学修士 CaltechCTMEサイバーセキュリティ証明書プログラム
2 フルスタック開発ブートキャンプ ブロックチェーンのPGプログラム
3 ソフトウェア開発のエグゼクティブ大学院プログラム-DevOpsの専門分野 すべてのソフトウェアエンジニアリングコースを表示

3.マーカー注釈

マーカー注釈は、宣言のみを目的としています。 この注釈にはメンバーが含まれておらず、データも含まれていません。 その唯一の目的は、注釈としての存在感を維持することです。 例:@Override。

4.注釈を入力します

これらのアノテーションは、タイプが使用されるすべての場所で使用できます。 たとえば、メソッドの戻り型に注釈を付けることができます。 タイプアノテーションは@Targetアノテーションでタグ付けされます。

タイプアノテーションを説明できるコードは次のとおりです。

//必要なクラスをインポートする

インポートjava.lang.annotation.ElementType;

import java.lang.annotation.Target;

//ターゲットアノテーションを使用してタイプにアノテーションを付ける

@Target(ElementType.TYPE_USE)

//単純な型アノテーションを宣言する

@interface TypeAnnoDemo {}

//メインクラス

パブリッククラスGFG{

//メインドライバーメソッド

public static void main(String [] args){

//文字列のタイプに注釈を付ける

@TypeAnnoDemo String string="このコードには型アノテーションが付けられています";

System.out.println(string);

abc();

}

//関数の戻り型に注釈を付ける

static @TypeAnnoDemo int abc(){

System.out.println( "この関数の戻り型には注釈が付けられています");

0を返します。

}

事前定義された注釈の例

先に述べたように、事前定義された注釈にはさまざまな種類があります。 見てみましょう:

1. @Override

このマーカーアノテーションは、メソッドでのみ使用できます。 @overrideアノテーションが付いたメソッドは、スーパークラスの別のメソッドに取って代わる必要があります。 これに失敗すると、コンパイル時エラーがトリガーされます。 これは、スーパークラスがオーバーロードされるだけでなく、実際にオーバーライドされることを保証する必要があるために発生します。

オーバーライドアノテーションを説明できるコードは次のとおりです。

//クラス1

クラスベース

{{

public void Display()

{{

System.out.println( "Base display()");

}

public static void main(String args [])

{{

ベースt1=new Derived();

t1.Display();

}

}

//クラス2

//クラスより上に拡張

クラス派生はベースを拡張します

{{

@オーバーライド

public void Display()

{{

System.out.println( "派生display()");

}

}

2.@Target

これは、別の注釈への注釈としてのみ使用することを目的としています。 @Targetは、ElementType定数でなければならない1つのパラメーターを受け入れます。 このパラメーターは、適用できる宣言を決定します。 @Targetアノテーションは、単一の値ではなく、複数の値を持つことができます。 ただし、複数の値を宣言する必要がある場合は、@ Target({ElementType.FIELD、ElementType.LOCAL_VARIABLE})のように中括弧の形式にする必要があります。

ここで@Retentionアノテーションを使用して、アノテーションの保持ステータスを判別できます。 @Retentionアノテーションには次の3つの要素が影響します。

  • ソース:通常、注釈はソースレベルで保持されるため、コンパイラは注釈を無視します。
  • 実行時:実行時に保持されます。
  • クラス:アノテーションはコンパイル時のままであり、Javaプログラムによって無視されます。

3.@AliExpress

このアノテーションは宣言目的でのみ使用できるため、特定のクラス宣言にのみ影響します。 1つの注釈が他の注釈に取って代わり、そのプロパティを継承できます。 したがって、サブクラスに特定の注釈がないかどうかをスーパークラスで確認できます。 ただし、アノテーションが存在する場合は、@合計アノテーションを取得します。

例えば:

//クラス1

クラスDeprecatedTest

{{

@非推奨

public void Display()

{{

System.out.println( "Deprecatedtest display()");

}

}

//クラス2

パブリッククラスSuppressWarningTest

{{

//注釈の下にコメントすると、プログラムは生成します

// 警告

@SuppressWarnings({"checked"、 "deprecation"})

public static void main(String args [])

{{

DeprecatedTest d1 = new DeprecatedTest();

d1.Display();

}

}

結論

ここでは、Javaのアノテーションについて学びました。 また、Java開発者が堅牢でスケーラブルなプログラムを簡単に作成するのに役立つ、Javaのアノテーションのタイプとその使用法についても学びました。

Javaの概念について詳しく知りたい場合は、ソフトウェアエンジニアリングにおけるupGradのジョブリンクPG認定が、 Java、HTML、JS、その他のソフトウェア開発ツールやライブラリなどのプログラミング言語を包括的に理解するための最善の策です。

このプログラムは、フィールドでエントリーレベルのポジションを確保しようとしている最終学年の学生または失業者の卒業生を対象としています。 5か月のコースは、MERN / Cloud-Nativeの専門分野をカバーし、学生が5つの実践的なプロジェクトに触れることでトップクラスのポートフォリオを構築するのに役立ちます。

だから、待ってはいけません。 upGradに行き、今日あなたの席を予約してください!

@jsonpropertyアノテーションとは何ですか?

Jsonpropertyアノテーションを使用すると、開発者はシリアル化および逆シリアル化中にJSONキーをプロパティ名にマップできます。 Javaのデフォルト設定に基づいて、キーはシリアル化中にPOJOフィールドにマップされます。 Jsonアノテーションは、マップされた名前を示す文字列属性を使用して、このデフォルト機能をオーバーライドするのに役立ちます。

Hibernateアノテーションとは何ですか?

Hibernateアノテーションは、オブジェクトとリレーショナルテーブルをマッピングするときにメタデータを指定するもう1つの手法です。 これらは、XMLマッピングメタデータの代わりに使用できる強力で比較的新しいマッピング方法です。 Hibernateアノテーションを使用すると、ユーザーはメタデータを単一のPOJO Javaファイルに格納できます。このファイルにはコードも含まれているため、テーブル構造をよりよく理解できます。

@SuppressWarningsとは何ですか?

@SuppressWarningsアノテーションは、抑制された警告をコンパイラーに通知します。 通知は、名前ごとに文字列形式で表示されます。 それはどんな種類の宣言にも与えることができます。 Javaは、警告を2つのクラス、つまり未チェックと非推奨に分類します。 古いコードがジェネリックベースのコードと相互作用すると、チェックされていない警告が生成されます。