株式会社イーブ|未経験・転職の方も就職可能。Javaプログラマー育成のエキスパート

HOMEJAVA技術者育成システム開発求人情報個人情報保護

第 22 回 ~ アノテーション ~

トップページ > Java技術者育成 > Javaワンポイント > 第 22 回 ~ アノテーション ~
今回のテーマは「アノテーション」です。


いつものように「アノテーションとは何ぞや」というところから始めます。
アノテーションとは、クラスやメソッドなどに記述されるメタデータ(データについてのデータ)のことで、対象となるメソッドなどの前に@をつけて記述します。
Java5で新しく導入された機能の一つで、「注釈」と訳されます。

では、アノテーションの有無がプログラムにどう関わっていくのかを、簡単なプログラムを使って説明していきます。
以下のPlayerクラスはObjectクラスのequalsメソッドをオーバーライドする仕様であるとします。
public class Player {
    private String name;

    public Player(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public boolean equals(Player player) {
        return getName().equals(player.getName());
    }

    public int hashCode() {
        return getName().hashCode();
    }
}
パッと見た限りでは、正しく実装されているように見えるかもしれません。
しかし、実はこのクラスのequalsメソッドはオーバーライドではなく、オーバーロードなのです。
このような場合、オーバーライドされていないことの発見が遅れ、潜在的なバグとなる可能性があります。

では、ここで上記のプログラムに、標準APIのOverrideアノテーションを追加してみましょう。
public class Player {
    private String name;

    public Player(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Player player) {
        return getName().equals(player.getName());
    }

    @Override
    public int hashCode() {
        return getName().hashCode();
    }
}
Overrideアノテーションを追加したことにより、メソッド自体は正常にも関わらず、このクラスはコンパイル不可能になります。
コンパイラがOverrideアノテーションを読み取り、正しくオーバーライドしているかチェックするようになったのです。
これでコンパイルの時点でバグが未然に防げたことになります。


以上のように、アノテーションを記述することで、アノテーションを読み取る側に必要な処理を行わせることができます。
アノテーションを適切に使いこなし、より簡単で、より確実な開発を目指しましょう。

[Javaワンポイント]内の前後の記事
第 23 回 ~ Guiceその1 ~
→ 第 22 回 ~ アノテーション ~
第 21 回 ~ DI ~


■更新日時での前後の記事
10月17日 お天気
→ 第 22 回 ~ アノテーション ~
10月16日 お天気