【Java】アノテーションとは - 意味や使い方を解説
- 作成日:2022/02/26
アットマーク(@)を記述するアノテーションについて解説します。
アノテーションとは
アノテーションとはコンピュータに注釈を指示するものです。 後で詳しく解説しますが、コンピュータにエラーをだすよう指示したり、逆に警告をださないように指示できたりします。
アノテーションをうまく使うことで、構文エラーをなくしたり、 予期せぬバグを防いだりできます。
よく使われるアノテーションは以下のようなものです。
アノテーション | 解説 |
---|---|
@Override | クラス継承をした時に、メソッドの上書きをすることを指示する |
@Deprecated | クラスまたはメソッドが非推奨であると指示する |
詳しく見ていきましょう。
@Override
@Overrideは「継承元クラスのメソッドを書き換えます」という意味のアノテーションです。 以下にサンプルを用意しました。8行目でアノテーションを使っています。
class Parent{
void eat(){
System.out.println("eat");
}
}
class Child extends Parent{
@Override
void eat(){
System.out.println("Child_eat");
}
}
3行目で、継承元のParentクラスではeatメソッドが記述されていますが、 それを継承先のChild クラスで内容を書き換えることをコンピュータに伝えています。
@Overrideを記述することで、コンピュータはeatメソッドを上書をするのだと理解します。 ゆえに、仮にeats()などのように存在しないメソッドを上書きしようとするとエラーをだしてくれるので、 スペルミスを防ぐことができます。
アノテーションはコンピュータに向けた指示ですが、 @Overrideは人間が読んでも「ここは上書きしているな」とわかりやすいので、 メソッドの上書きの時は@Overrideを使うと良いでしょう。
@Deprecated
@Deprecatedはクラスまたはメソッドが非推奨であるとコンピュータに指示するアノテーションです。 「非推奨なら消せばいいじゃん」と思うかもしれませんが、大人数で開発していると安易に消したりできないこともあるのです。
サンプルは以下です。
class Child{
@Deprecated
void eat(){
System.out.println("Child_eat");
}
}
public class App {
public static void main(String[] args) {
Child test = new Child();
test.eat();
}
}
3行目に@Deprecatedをつけることで、eatメソッドは非推奨であるとコンピュータに指示しています。 これをコンパイルすると以下のようなメッセージがでます。
ノート:App.javaは推奨されないAPIを使用またはオーバーライドしています。
ノート:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
ただし、この文言がでてもコンパイルは完了してclsssファイルは正常に作成されますし、 それを実行してもeatメソッドは正常に動きます。
なので、@Deprecatedをつけてもメッセージとして非推奨と表示されるだけで、処理は普通に実施されます。