Java アノテーション
Java アノテーション
このチュートリアルでは、注釈とは何か、さまざまな Java 注釈、および例を使用してそれらの使用方法を学習します。
Java アノテーションは、プログラム ソース コードのメタデータ (データに関するデータ) です。
これらは、プログラムに関する追加情報をコンパイラーに提供しますが、プログラム自体の一部ではありません。これらの注釈は、コンパイルされたプログラムの実行には影響しません。
@
で始まる注釈 .その構文は次のとおりです:
@AnnotationName
@Override
の例を見てみましょう 注釈。
@Override
アノテーションは、このアノテーションでマークされたメソッドが、同じメソッド名、戻り値の型、およびパラメーター リストを持つスーパークラスのメソッドをオーバーライドすることを指定します。
@Override
の使用は必須ではありません メソッドをオーバーライドするとき。ただし、これを使用すると、メソッドのオーバーライド中に何か問題がある場合 (パラメーターの型が間違っているなど)、コンパイラーはエラーを返します。
例 1:@Override アノテーションの例
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
@Override
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
出力
I am a dog.
この例では、メソッド displayInfo()
両方のスーパークラス Animal に存在します サブクラス Dog .このメソッドが呼び出されると、スーパークラスのメソッドの代わりにサブクラスのメソッドが呼び出されます。
注釈の形式
注釈には、要素 (メンバー/属性/パラメーター) を含めることもできます。
1.マーカー注釈
マーカー注釈には、メンバー/要素は含まれません。宣言をマークするためにのみ使用されます。
その構文は次のとおりです:
@AnnotationName()
これらの注釈には要素が含まれていないため、括弧は除外できます。たとえば、
@Override
2.単一要素の注釈
1 つの要素の注釈には、1 つの要素のみが含まれます。
その構文は次のとおりです:
@AnnotationName(elementName = "elementValue")
要素が 1 つしかない場合、その要素に value という名前を付けるのが慣習です。 .
@AnnotationName(value = "elementValue")
この場合、要素名も除外できます。要素名は value になります
@AnnotationName("elementValue")
3.複数要素の注釈
これらの注釈には、コンマで区切られた複数の要素が含まれています。
その構文は次のとおりです:
@AnnotationName(element1 = "value1", element2 = "value2")
注釈の配置
宣言は、その宣言の上に配置することにより、注釈でマークできます。 Java 8 では、型の前に注釈を配置することもできます。
1.上記の宣言
前述のように、Java アノテーションは、クラス、メソッド、インターフェース、フィールド、およびその他のプログラム要素宣言の上に配置できます。
例 2:@SuppressWarnings アノテーションの例
import java.util.*;
class Main {
@SuppressWarnings("unchecked")
static void wordsList() {
ArrayList wordList = new ArrayList<>();
// This causes an unchecked warning
wordList.add("programiz");
System.out.println("Word list => " + wordList);
}
public static void main(String args[]) {
wordsList();
}
}
出力
Word list => [programiz]
@SuppressWarnings("unchecked")
を使用せずに上記のプログラムをコンパイルすると、 注釈、コンパイラは引き続きプログラムをコンパイルしますが、次のような警告が表示されます:
Main.java uses unchecked or unsafe operations. Word list => [programiz]
警告を受けています
Main.java uses unchecked or unsafe operations
以下のステートメントのためです。
ArrayList wordList = new ArrayList<>();
これは、配列リストのジェネリック型を定義していないためです。この警告は、山括弧 <>
内にジェネリックを指定することで修正できます .
ArrayList<String> wordList = new ArrayList<>();
2.型注釈
Java 8 より前は、アノテーションは宣言にのみ適用できました。これで、型注釈も使用できるようになりました。これは、型を使用する場所ならどこにでも注釈を配置できることを意味します。
コンストラクターの呼び出し
new @Readonly ArrayList<>()
型の定義
@NonNull String str;
この宣言は、null 以外の変数 str を指定しています タイプ String
の NullPointerException
を避ける .
@NonNull List<String> newList;
この宣言は、タイプ String
の非 null リストを指定します .
List<@NonNull String> newList;
この宣言は、型 String
の非 null 値のリストを指定します .
型キャスト
newStr = (@NonNull String) str;
条項の拡張と実装
class Warning extends @Localized Message
throws 節
public String readMethod() throws @Localized IOException
型注釈により、Java コードの分析が向上し、さらに強力な型チェックが提供されます。
注釈の種類
1. 定義済みの注釈
<オール>@Deprecated
@Override
@SuppressWarnings
@SafeVarargs
@FunctionalInterface
2. メタアノテーション
<オール>@Retention
@Documented
@Target
@Inherited
@Repeatable
3. カスタム アノテーション
これらの注釈型については、Java 注釈型のチュートリアルで詳しく説明されています。
注釈の使用
- コンパイラの説明 - 注釈は、コンパイラに指示を与えたり、エラーを検出したり、警告を抑制したりするために使用できます。組み込みの注釈
@Deprecated
、@Override
,@SuppressWarnings
これらの目的で使用されます。 - コンパイル時の命令 - これらの注釈によって提供されるコンパイル時の命令は、ソフトウェア ビルド ツールがコード、XML ファイルなどを生成するのに役立ちます。
- ランタイムの説明 - 一部の注釈は、実行時にプログラムに指示を与えるために定義できます。これらの注釈には、Java リフレクションを使用してアクセスします。
Java