アノテーションの基礎(@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 を付けると、アノテーションの効果が体感できます。
