Javaにはアノテーション(annotation)という機能があります。この機能を使うことでわざとエラーを出すことや、逆に警告を出さないように仕向けることもできます。
アノテーションは大変便利なものですが、初心者には分かりづらい面もあります。
ここではアノテーションの種類や使い方を紹介していきます。
Javaでのアノテーションとは
Javaではアノテーションを行うことができます。アノテーションの日本語訳は注釈・注記です。
主にコンピューターに対して、ソースコードだけでは伝えきれない細かな情報を伝える時にアノテーションは使われます。その利用方法の中には、わざとエラーを出力させたり、プログラムの動作を変更させたりすることも含まれており、使いこなせることができたらとても便利です。
Javaのコード上では、@(アットマーク)の後ろに記述することでアノテーションであることを表現することができます。実際に記述する場所は、クラス・インターフェース・メソッド・メンバ変数・メソッド要因などとなります。
アノテーションは大きく3つの種類に分けられています。その3つとは、
- 特にデータを持たないアノテーション
- データを1つ持つ単一アノテーション
- データを複数持つフルアノテーション
です。実務レベルではよく用いられる技法なので、習得しておくといいでしょう。
特にデータを持たないアノテーションのことは、マーカーアノテーションと呼ばれています。
記述する時には、@アノテーション名だけとなります。
単一アノテーションとはメソッドを1つ持つアノテーションです。
@アノテーション名(〜)のようにデータを1つ保持する記述がなされます。
フルアノテーションとはメソッドを2つ以上持つアノテーションです。
記述するには@アノテーション(〜,〜)のように書きます。
Javaでアノテーションをする方法
アノテーションには、標準アノテーションを使う方法と自作したアノテーションを使う方法とがあります。ここではこの2つのやり方を解説していきます。
独自アノテーションの作成方法
自分でアノテーションを作成する場合、マーカーアノテーション・単一アノテーション・フルアノテーションのすべてを作成することができます。またクラスやメソッドなどを付与できる場所も、特定可能です。作成の手順は、
- まず作成するアノテーション名の前に@interfaceをつけます。
具体的には「public @interface アノテーション名{}」という形になります。 - 次にアノテーションを保持する範囲を指定します。
@Retentionの後にアノテーションを保持する範囲を記述しましょう。値としてRetentionPolicy.RUNTIMEを選んだ場合、アノテーション実行時に保持できるリフレクションを使うと情報を取得可能です。
値としてRetentionPolicy.CLASSを選択した時、クラスファイルに保持されますが、実行時には保持されないので注意してください。
@Retentionがないのなら、この値がデフォルトとなります。RetentionPolicy.SOURCEを選んだなら、アノテーションはソースファイルに保持されますが、クラスファイルには保持されません。 - 最後にアノテーションを適用する場所を指定します。
「@Target(アノテーションを適用する場所)」のように記述します。ElementType.TYPEとしたなら、クラス、インターフェース、アノテーション、enum型に適用します。
ElementType.FIELDとしたなら、フィールドに適用します。
コンストラクタに適用したいなら、ElementType.CONSTRUCTORと書く必要があります。
ElementType.METHODと書くと、メソッドに適用可能です。
標準アノテーションのやり方
標準アノテーションの実行には、あらかじめ用意されているものから選択します。
標準アノテーションの数は数え切れないほどあるので、ここではよく使われる、
- @Overrideアノテーション
- @Deprecatedアノテーション
- @SupperessWarningsアノテーション
について解説していきます。
@Overrideアノテーション
@Overrideアノテーションはメソッドの注釈で使われる、マーカーアノテーションの一種です。
使用することで、クラスを再利用できるので書く記述量を減らすことができます。
変更が必要な場合も変更する箇所を少なくすることが可能です。
やり方は@Overrideの前にcalcメソッドを記述してください。こうすることで記述したメソッドが、スーパークラスのメソッドにオーバーライドしていることを明示することができます。
このアノテーションを付与することで、スーパークラスにないメソッドを記述するとコンパイラエラーが発生するようになります。メソッド名の誤記などを防げるようになるのです。
@Deprecatedアノテーション
@Deprecatedアノテーションは開発環境の変化により、過去に使っていたメソッドやフィールドが非推奨になったと周囲に注釈するために使われる、マーカーアノテーションの一種です。
非推奨のため使用自体は可能ですが、その場合使用には注意が必要となります。このアノテーションを使用することで今後のリソース管理パッケージに含まれる、参照されないメソッド・クラス・例外・列挙・インターフェース・変数を特定することができるようになります。
新しい登録者は廃止された要素を参照不可能ですが、既存の登録者やAPI統合に対しては引き続き機能させられます。
@SupperessWarningsアノテーション
@SupperessWarningsアノテーションは、コンパイラーが特定の警告を発生することを抑制するために使う標準アノテーションです。下位互換性等の都合で非推奨のメソッドを意図して使用している場合、警告が出ないようにしてくれます。@SupperessWarningsアノテーションを利用し、明示的に警告をオフにしてくれます。その他不要なキャスト・非推奨のメンバーの利用・ゼロで除算・使われていない変数がある等の場合、警告を抑制することが可能です。
SupperessWarningsの後ろのカッコ内の前提値を入れ替えることで実行できます。
具体的には@SupperessWarnings(cast)のように記述します。
こうすれば不要なキャストを使用しても警告が出ることはありません。ただ警告が出なくてもエラーが発生していることは確かなので、初心者が使用するのは避けたほうがいいでしょう。
Javaでアノテーションをするメリット
ここではアノテーションを使うメリットを紹介します。
アノテーションを使うメリットは、複数あります。
アノテーションを使うメリット1.エラーを出せる
アノテーションを活用することで、スペルミスをしたときなどにエラーを出すことができます。
ソースコードはすべて人が一つ一つ打ち込まなければならないので、人的なミスを避けることができません。そこでアノテーションを利用してスペルミスが起こった場合、エラーを出力するようにできるのです。
アノテーションを使うメリット2.書き方を制限できる
アノテーションには他のプログラマに対してある程度書き方を制限する機能があります。
他のプログラマに対して、何を書いてよいか・何を書いてはいけないのかを指示することができるのです。
アノテーションを使うメリット3.複数で作成する時に有利になる
Javaでは複数で作成することが多いので、コミュニケーション能力が重要になってきます。
個人で作成しているだけなら1人で全体を見渡せますが、大規模なプログラム開発においては複数の開発者をまとめ上げなくてはなりません。
目的を統一するだけでなく、同じスタイルで開発する必要があります。
自分勝手なスタイルで開発を進めてしまうと、かえって時間がかかってしまうのです。
アノテーションを使うメリット4.必要な情報を埋め込める
アノテーションは開発者用のドキュメント情報をソースコードへ記述できるだけでなく、プログラムの開発に必要な情報を埋め込むといったことが簡単に行なえます。
この能力もアノテーションを利用するメリットの1つです。
Javaのアノテーションとは まとめ
Javaのアノテーションを使いこなすことができれば、メタメッセージを残すことができるので大規模な開発を行うのがとても有利になります。またアノテーションを使うことで、エラーの警告を出すことも可能になります。
ソースコードは手で打ち込まなければならないため、ヒューマンエラーが起こりやすいのですが、アノテーションはそういったミスに対しても有効です。