Java の注釈記号@

Bishal Awasthi 2023年10月12日
  1. Java での@Override アノテーション
  2. Java での@SuppressWarnings アノテーション
  3. Java での@Deprecated アノテーション
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() メソッドを使用して値 applemango を追加します。最後に、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 を作成し、パラメーターcolorlength、および 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.