単純な Java アノテーション
JDK5 で提供される単純なアノテーション タイプは 3 つだけです。これら 3 つは、エラーを防止したりリマインダーを提供したりするために使用されます。
1.オーバーライド
2.非推奨
3.警告の抑制
JDK5 (別の用語、Tiger) には実際には多くの組み込みアノテーションが含まれていないことに注意することが重要です。代わりに、JDK5 はコア Java がアノテーション機能をサポートできるようにするために使用されると厳密に述べられています。メタデータ関数を定義する。これはプログラマが記述する必要がある。カスタム アノテーション タイプは、他の JSR 標準でも一連の標準アノテーション タイプを記述しています。以下では、例を使用してこれら 3 つの単純なアノテーションについて詳しく説明します。
注釈をオーバーライドする
Override アノテーションは、アノテーションが付けられたメソッドがスーパークラス内のメソッドをオーバーライドする必要があることを示します。
メソッドがこのアノテーションを使用していても、スーパークラス内のメソッドをオーバーライドしていない場合 (たとえば、大文字の使用が間違っている、パラメータが間違っている、またはメソッドがサブクラス自体によって定義されている場合)、コンパイラはエラーを生成します。
(注: インターフェイスにメソッドを実装する場合、JRE5 ではオーバーライド アノテーションを使用できません。JRE6 では使用できます。多くの場合、JRE5 ではこのエラーが報告されます)。
例 1 は、アノテーションのオーバーライドを示しています。
Java アノテーションの例 1:
次のようにコードをコピーします。
パブリック クラス Test_Override {
@オーバーライド
public String toString() {
return super.toString() + "「Override」アノテーションを使用したテスト";
}
}
メソッド名のスペルが間違っている場合はどうなりますか? たとえば、toString メソッドの名前を「tostring」(すべて小文字) に変更すると、コンパイル時に次のようなエラー メッセージが表示されます。
次のようにコードをコピーします。
1 つのソース ファイルを D:tempNew フォルダーにコンパイルする (2)
TestJavaApplication1buildclasses
D:temp新しいフォルダー (2)TestJavaApplication1srctest
myannotationTest_Override.java:24: メソッドはオーバーライドされません
スーパークラスのメソッド
@オーバーライド
1 エラー
ビルドに失敗しました (合計時間: 0 秒)
もちろん、Eclipse は赤十字を直接報告します。IDE は非常に使いやすくなったので、初心者は JDK コマンド ラインをいじるべきではありません。
非推奨のアノテーション
このアノテーションは、プログラムが非推奨 (Deprecated、obsolete、obsolete) 要素を呼び出した場合に、コンパイラーが警告メッセージを表示する必要があることを示します。例 2 は、Deprecated アノテーションの使用方法を示しています。
Java アノテーションの例 2
まず、次のようにクラスを作成し、メソッドを非推奨としてマークします。
次のようにコードをコピーします。
パブリック クラス Test_Deprecated {
@非推奨
public void doSomething() {
System.out.println("非推奨のアノテーションを使用したテスト: '非推奨'");
}
}
次に、別のクラスからこのメソッドを呼び出してみます。
次のようにコードをコピーします。
パブリック クラス TestAnnotations {
public static void main(String arg[]) throws Exception {
新しい TestAnnotations();
}
public TestAnnotations() {
Test_Deprecated t2=new Test_Deprecated();
t2.doSomething();
}
この例の doSomething() メソッドは非推奨メソッドとして宣言されているため、Test_Deprecated.java ファイルのコンパイル時には警告メッセージが表示されません。次のような警告メッセージが表示されます (Eclipse が警告します)。
次のようにコードをコピーします。
1 つのソース ファイルを D:tempNew フォルダーにコンパイルします
(2)TestJavaApplication1buildクラス
D:temp新しいフォルダー
(2)TestJavaApplication1srctestmyannotation
TestAnnotations.java:27:
警告: [非推奨] doSomething() の
test.myannotation.Test_Deprecated は非推奨になりました
t2.doSomething();
1 警告
警告注釈を抑制する
このアノテーションは、アノテーションが付けられた要素とすべてのサブ要素の警告メッセージを抑制する必要があることをコンパイラーに指示します。たとえば、クラスで Suppresswarnings アノテーションを使用するとします。警告を抑制する 1 つのメソッドで Suppresswarnings アノテーションを使用して別の警告を抑制すると、両方の警告がメソッド レベルで抑制されます。例 3 を参照してください。
Java アノテーションの例 3:
次のようにコードをコピーします。
パブリック クラス TestAnnotations {
public static void main(String arg[]) throws Exception {
new TestAnnotations().doSomeTestNow();
}
@SuppressWarnings({"非推奨"})
public void doSomeTestNow() {
Test_Deprecated t2 = 新しい Test_Deprecated();
t2.doSomething();
}
}
この例では、例 2 に示す非推奨の警告メッセージを抑制するために @SuppressWarnings が使用されています。このメソッドのこのタイプの警告は抑制されるため、「非推奨」の警告は表示されなくなります。
注: このアノテーションは最も内側の要素で使用することをお勧めします。そのため、特定のメソッドの警告のみを抑制したい場合は、クラスのアノテーションを使用するのではなく、メソッドにアノテーションを付ける必要があります。
メタアノテーション (Java アノテーション タイプ)
メタアノテーション (実際にはアノテーションと呼ばれます) には、次の 4 つのタイプがあります。
1.対象
2.保持
3.文書化
4.継承
ターゲットのアノテーション
ターゲット注釈は、注釈タイプがどのターゲット要素に適用されるかを示します。これには、次の列挙型値が含まれます。
1.@Target(ElementType.TYPE) -- 任意のクラスの要素に適用できます。
2.@Target(ElementType.FIELD) - フィールドまたはプロパティにのみ適用されます
3.@Target(ElementType.METHOD) -- メソッドの注釈にのみ適用可能
4.@Target(ElementType.PARAMETER) - メソッドのパラメータにのみ適用されます
5.@Target(ElementType.CONSTRUCTOR) -- コンストラクターにのみ適用されます
6.@Target(ElementType.LOCAL_VARIABLE) -- ローカル変数にのみ適用されます
7.@Target(ElementType.ANNOTATION_TYPE)—宣言された型自体が注釈型であることを示します
例 4 は、Target アノテーションを示しています。
Java アノテーションの例 4
まず、以下に示すように、 @Target メタアノテーションを使用して Test_Target という名前のアノテーション タイプが定義されます。
次のようにコードをコピーします。
@Target(ElementType.METHOD)
public @interface Test_Target {
パブリック String doTestTarget();
}
次に、Test_Target のアノテーションが付けられるクラスを作成します。
次のようにコードをコピーします。
パブリック クラス TestAnnotations {
public static void main(String arg[]) {
新しい TestAnnotations().doTestTarget();
}
// メソッドにアノテーションを使用します。OK。
// 途中で改行を入れたり、2 行などにすることはできません。Java は冗長な改行を無視します。
@Test_Target(doTestTarget="Hello World!")
public void doTestTarget() {
System.out.printf("テスト対象のアノテーション");
}
}
@Target(ElementType.METHOD) アノテーションは、このアノテーション タイプがメソッドにアノテーションを付けるためにのみ使用できることを示します。ただし、このアノテーションが文字列変数で宣言された場合は、警告メッセージは表示されません。こんな感じでしょうか?
次のようにコードをコピーします。
パブリック クラス TestAnnotations {
// これは間違ったアプローチであり、アノテーションが間違ったレベルにあるためコンパイルは成功しません。
// メタ アノテーションは、メソッドのみにアノテーションを付けることができ、プロパティにアノテーションを付けるためには使用できないことを示します。
@Test_Target(doTestTarget="Hello World!")
プライベート文字列 str;
public static void main(String arg[]) {
新しい TestAnnotations().doTestTarget();
}
public void doTestTarget() {
System.out.printf("テスト対象のアノテーション");
}
}
唯一の変更点は、アノテーション宣言がメソッド レベルからフィールド レベルに移動することですが、これは正しくありません。アノテーション @Test_Target はメソッド レベルでのみ適用されると定義しているため、このクラスをコンパイルしようとするとエラーが発生する可能性があります。このようなメッセージ:
次のようにコードをコピーします。
「TestAnnotations.java」:
D:R_AND_DTestAnnotationsrctestmyannotation
TestAnnotations.java:16:
注釈タイプは行のこの種の宣言には適用できません
16、列0
@Test_Target(doTestTarget="Hello World!")
^
Javacコンパイルでエラーが発生しました