Java の注釈記号@
この記事では、Java ではアノテーションと呼ばれる@
記号を紹介します。@Override
、@SuppressWarnings
、@Deprecated
などの組み込みの Java アノテーションに焦点を当てます。
Java での@Override
アノテーション
アノテーションは、Java のクラス、インターフェース、およびメソッドに付加された追加情報を示す方法です。Java コンパイラと JVM は、提供された情報をアノテーションを使用して使用します。注釈は@
記号で始まります。@Override
アノテーションは、子クラスメソッドが親クラスメソッドをオーバーライドすることを保証します。値や要素がないため、マーカー注釈です。@Override
アノテーションを使用すると、コンパイラはエラーを生成し、メソッドのオーバーライド中に間違いがあった場合に警告を発します。チェックする可能性のある間違いは、スペルミスと引数および戻りタイプのエラーです。継承を作成することで、@Override
アノテーションの使用法を示すことができます。まず、アノテーションを使用しませんが、後で@Override
がどのように機能するかを示すために使用します。
たとえば、クラス Parent
を作成し、void
戻り型を使用してメソッド message()
を記述します。メソッド内にいくつかのメッセージを出力します。同様に、別のクラス Child
を作成し、クラス Parent
を拡張します。void
タイプで同じメソッド message
を作成し、その中にメッセージを書き込みます。メソッドの直前に、アノテーション@Override
を記述します。次に、メインクラス内で、各クラスのオブジェクトを作成し、message()
メソッドを呼び出します。
ここで、サブクラスはスーパークラスを継承し、各クラスの各メソッドは問題なく呼び出されます。
サンプルコード:
class Annotation {
public static void main(String[] args) {
new Child().message();
new Parent().message();
}
}
class Parent {
void message() {
System.out.println("Invoked from the Parent class");
}
}
class Child extends Parent {
@Override
void message() {
System.out.println("Invoked from the Child class");
}
}
出力:
Invoked from the Child class
Invoked from the Parent class
Child
クラスの message()
メソッドを mesage()
に変更します。次に、プログラムを実行します。次の出力が表示されます。
出力:
Annotation.java:18: error: method does not override or implement a method from a supertype
ここでは、メソッド名を変更しました。時々、プログラマーはオーバーライド中にそのようなタイプの間違いを犯す可能性があります。したがって、@Override
アノテーションは、メソッドのオーバーライド中にエラーを確実にし、プログラマーに警告します。
Java での@SuppressWarnings
アノテーション
@SuppressWarnings
アノテーションは、指定されたコード部分のエラーを抑制するか無視するようにコンパイラーに指示します。タイプ、フィールド、メソッド、パラメーター、コンストラクター、およびローカル変数にアノテーションを使用できます。エラーを抑制するために、注釈の括弧の間に値 unchecked
を@SuppressWarnings("unchecked")
として指定できます。クラスの前にアノテーションを使用すると、クラス内のエラーが抑制されます。また、クラス内のメソッドの前に使用すると、その特定のクラスからのエラーのみが抑制されます。
たとえば、util
パッケージをインポートし、Annotation
という名前のクラスを作成します。main メソッドの前に@SuppressWarnings("unchecked")
を記述します。main メソッド内で、ArrayList()
のインスタンスを作成し、それを fruits
変数に割り当てます。次に、add()
メソッドを使用して値 apple
と mango
を追加します。最後に、fruits
変数を出力します。
以下の例では、util
パッケージからすべてをインポートしています。後で使用する ArrayList
クラスをインポートします。エラーはありますが、上記のコードは正常に実行されます。非ジェネリックコレクション ArrayList
を使用しました。<>
記号内のタイプは指定していません。したがって、コードに欠陥があります。ただし、@SuppressWarnings
アノテーションを使用してエラーを抑制したため、実行されます。
コード例:
import java.util.*;
class Annotation {
@SuppressWarnings("unchecked")
public static void main(String args[]) {
ArrayList fruits = new ArrayList();
fruits.add("apple");
fruits.add("mango");
System.out.println(fruits);
}
}
出力:
[apple, mango]
次のコードに注釈を使用しない場合、コンパイラーは次のエラーを表示します。
出力:
Note: Annotation.java uses unchecked or unsafe operations.
Java での@Deprecated
アノテーション
@Deprecated
アノテーションは、指定されたコードを非推奨コードとして示すために使用されます。アノテーションを使用すると、コンパイラは非推奨の警告を表示します。@Deprecated
アノテーションを使用して、タイプ、メソッド、フィールド、およびコンストラクターにアノテーションを付けることができます。
たとえば、クラス Car
を作成し、パラメーターcolor
、length
、および width
を使用してコンストラクターを作成します。コンストラクターの前に@Deprecated
アノテーションを使用します。体を空のままにします。別のコンストラクターを作成し、その中に文字列パラメーターname
を記述します。別のクラス Annotation
を作成し、main メソッド内でこれら 2つのコンストラクターを呼び出します。
以下の例では、最初のコンストラクターの前に@Deprecated
アノテーションを使用しています。これにより、コンパイラーはコンストラクターが非推奨であることを示す警告を生成できます。このようにして、アノテーションを使用して、コードで非推奨となるものを指定できます。必要に応じて以前のバージョンにロールバックするために使用できるため、非推奨のコードを削除することはお勧めしません。このような場合は、新しい代替手段を使用することをお勧めします。
サンプルコード:
class Annotation {
public static void main(String args[]) {
new Car("red", 550, 300);
new Car("Lambo");
}
}
class Car {
@Deprecated
Car(String color, int length, int width) {}
Car(String name) {}
}
出力:
Note: Annotation.java uses or overrides a deprecated API.