今回のテーマは「アノテーション」です。
いつものように「アノテーションとは何ぞや」というところから始めます。
アノテーションとは、クラスやメソッドなどに記述されるメタデータ(データについてのデータ)のことで、対象となるメソッドなどの前に@をつけて記述します。
Java5で新しく導入された機能の一つで、「注釈」と訳されます。
では、アノテーションの有無がプログラムにどう関わっていくのかを、簡単なプログラムを使って説明していきます。
以下のPlayerクラスはObjectクラスのequalsメソッドをオーバーライドする仕様であるとします。
パッと見た限りでは、正しく実装されているように見えるかもしれません。
しかし、実はこのクラスのequalsメソッドはオーバーライドではなく、オーバーロードなのです。
このような場合、オーバーライドされていないことの発見が遅れ、潜在的なバグとなる可能性があります。
では、ここで上記のプログラムに、標準APIのOverrideアノテーションを追加してみましょう。
Overrideアノテーションを追加したことにより、メソッド自体は正常にも関わらず、このクラスはコンパイル不可能になります。
コンパイラがOverrideアノテーションを読み取り、正しくオーバーライドしているかチェックするようになったのです。
これでコンパイルの時点でバグが未然に防げたことになります。
以上のように、アノテーションを記述することで、アノテーションを読み取る側に必要な処理を行わせることができます。
アノテーションを適切に使いこなし、より簡単で、より確実な開発を目指しましょう。
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();
}
}
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();
}
}
■[Javaワンポイント]内の前後の記事
↑ 第 23 回 ~ Guiceその1 ~
→ 第 22 回 ~ アノテーション ~
↓ 第 21 回 ~ DI ~
■更新日時での前後の記事
↑ 10月17日 お天気
→ 第 22 回 ~ アノテーション ~
↓ 10月16日 お天気
