Java 逆引き集 | アノテーションの基礎(@Override 等) — メタ情報

Java Java
スポンサーリンク

アノテーションの基礎(@Override 等) — メタ情報

Javaの アノテーション は「コードに付けるメタ情報(補足情報)」です。コンパイラやフレームワークに「この要素はこう扱ってほしい」と伝える仕組み。初心者がまず覚えるべき代表が @Override です。


基本概念

  • アノテーションとは: クラス・メソッド・フィールドに「タグ」を付ける。
  • 目的: コンパイラチェック、コード生成、フレームワーク連携。
  • 書き方: @AnnotationName を対象の宣言の直前に書く。

よく使う標準アノテーション

@Override — オーバーライドを明示

class Animal {
    void speak() { System.out.println("???"); }
}

class Dog extends Animal {
    @Override
    void speak() { System.out.println("ワン"); }
}
Java
  • 効果: 親クラスのメソッドを正しくオーバーライドしているかコンパイラがチェック。
  • メリット: 引数や戻り値を間違えるとエラーになる。安全性アップ。

@Deprecated — 非推奨を明示

class OldApi {
    @Deprecated
    void oldMethod() { }
}
Java
  • 効果: 呼び出すと警告が出る。
  • 用途: 古いAPIを残しつつ、新しいAPIへの移行を促す。

@SuppressWarnings — 警告抑制

@SuppressWarnings("unchecked")
void useRawList() {
    List list = new ArrayList(); // 本来は型指定すべき
}
Java
  • 効果: コンパイラ警告を抑制。
  • 注意: 本当に必要な場合だけ使う。乱用すると危険。

@FunctionalInterface — 関数型インターフェースを保証

@FunctionalInterface
interface Converter {
    int convert(String s);
}
Java
  • 効果: 抽象メソッドが1つだけであることをコンパイラが保証。
  • 用途: ラムダ式やメソッド参照で使うインターフェース。

実務での使い分け

  • @Override: 継承やインターフェース実装で必須。
  • @Deprecated: 古いメソッドを残すとき。
  • @SuppressWarnings: やむを得ない警告抑制。
  • @FunctionalInterface: ラムダ用インターフェース設計時。

例題で練習

例題1: オーバーライドの安全確認

class Parent {
    void hello() { System.out.println("Hello"); }
}
class Child extends Parent {
    @Override
    void hello() { System.out.println("こんにちは"); }
}
Java

👉 引数や戻り値を間違えるとコンパイルエラー。


例題2: 非推奨APIの移行

class Service {
    @Deprecated
    void oldLogin() { System.out.println("旧ログイン"); }

    void newLogin() { System.out.println("新ログイン"); }
}
Java

👉 呼び出し側に警告が出るので、新しいメソッドへ移行しやすい。


例題3: ラムダ用インターフェース

@FunctionalInterface
interface Printer {
    void print(String s);
}

Printer p = msg -> System.out.println(msg);
p.print("Hello");
Java

👉 抽象メソッドが1つだけなのでラムダ式で使える。


テンプレート集

オーバーライド

@Override
public 戻り値型 メソッド名(引数...) { ... }
Java

非推奨

@Deprecated
public void 古いメソッド() { ... }
Java

警告抑制

@SuppressWarnings("警告種別")
Java

関数型インターフェース

@FunctionalInterface
interface 名前 {
    戻り値型 メソッド(引数...);
}
Java

まとめ

  • アノテーションは「コードに意味を付けるタグ」
  • @Override: オーバーライドの安全確認。
  • @Deprecated: 非推奨を明示。
  • @SuppressWarnings: 警告抑制。
  • @FunctionalInterface: ラムダ用インターフェース保証。

👉 練習課題として「動物クラス」を作り、@Override で鳴き声をオーバーライド、古いメソッドに @Deprecated を付けると、アノテーションの効果が体感できます。

タイトルとURLをコピーしました