【Java】アノテーションって何?使い方について解説!
アノテーションとは「コンパイラやツールに付加情報を伝える機能」のことであり、もっと具体的にいうとはJavaを書くときに大切な情報をコメントできるものです。
Javaのプログラムにおいてアノテーションをつけることは必須ではありませんが利用することで可読性があがります。
今回はアノテーションの以下の内容について解説していきます。
⚫︎ @Deprecatedアノテーション
⚫︎ @Overrideアノテーション
⚫︎ @SuppressWarningsアノテーション
⚫︎ Java7で追加された@safeVarargsアノテーション
目次
アノテーションとは
アノテーションとはコード中に注釈を記述することで、コンパイラやツールに付加情報を伝える機能のことをいいます。
Javaプログラムにおいてアノテーションをつけることは必須ではありませんが利用することで可読性があがりますのでつけておいて損はありません。
標準アノテーション
標準アノテーションとして以下の3つのアノテーションがありますのでそれらについて紹介していきます。
⚫︎ @Deprecated
⚫︎ @Override
⚫︎ @SuppressWarnings
@Deprecatedアノテーション
@Deprecatedは使用できるけどできれば使用したくないメソッドやフィールドに対して記述します。
クラス、メソッド、フィールドに記述することができます。
@Overrideアノテーション
@Overrideアノテーションは、メソッドをオーバーライドしたい場合に使用します。
メソッドのみに記述でき、親クラスにないメソッドを記述した場合、このアノテーションによってエラーが発生しますので、メソッド名の誤記などを防ぐことができます。
オーバーライドについてはこちらをご参考ください。
@SuppressWarningsアノテーション
@SuppressWarningsアノテーションは、コンパイル時の警告を出さないようにします。
アノテーションの後ろのカッコ内に、どの警告を出さないようにするかを記述します。
カンマで区切ることで、複数の指定が可能になり、クラス、メソッド、フィールドに記述することができます。
アノテーションを使ったサンプルコード
アノテーションを使ったサンプルコードを紹介します。
@Deprecatedを使う場合
DeprecatedClass.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class DeprecatedClass{ private String dc = "アイウエオ"; public DeprecatedClass(String dc){ this.dc = dc; } @Deprecated public String StringA(){ return dc; } public String StringB(){ return dc; } } |
Main.java
1 2 3 4 5 6 7 |
public class Main { public static void main(String[] args) { DeprecatedClass dc = new DeprecatedClass("あいうえお"); System.out.println("取得する値は " + dc.StringA() + "です"); System.out.println("取得する値は " + dc.StringB() + "です"); } } |
出力結果
取得する値は あいうえおです
取得する値は あいうえおです
StringAメソッドに@Deprecatedアノテーションを付けることで、非推奨の警告が出ますが古い方のメソッドを削除することなく使用することができます。
@Overrideを使う場合
Override1.java
1 2 3 4 5 6 7 8 9 10 11 12 |
class Override1 { public String val1; public Override1(String str1) { this.val1 = str1; } public void output() { System.out.println(this.val1 + "です。"); } } |
Override2.java
1 2 3 4 5 6 7 8 9 10 |
class Override2 extends Override1 { public Override2(String str1) { super(str1); } @Override // 親クラスで定義されているoutputに書き換える public void output() { System.out.println("出力内容の変更: " + this.val1); } } |
Main.java
1 2 3 4 5 6 7 |
public class Main { public static void main(String[] args) { Override2 over2 = new Override2("あいうえお"); over2.output(); } } |
出力結果
出力内容の変更: あいうえお
Override1クラスで定義されているoutputメソッドの内容がOverride2クラスで書き換えられています。
@SuppressWarningsを使う場合
SuppressWarningsClass.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
class SuppressWarningsClass { private static String str = "アイウエオ"; @SuppressWarnings("static-access") public SuppressWarningsClass(String str) { this.str = str; } public static String StringA() { return str; } } <p class="blog_p" style="font-size: 20px;"><strong>Main.java</strong></p> <pre class="lang:default decode:true "> public class Main { @SuppressWarnings("static-access") public static void main(String[] args) { String str1 = "あいうえお"; @SuppressWarnings("unused") String str2 = "あいうえお"; SuppressWarningsClass swc1 = new SuppressWarningsClass(str1); @SuppressWarnings("unused") SuppressWarningsClass swc2 = new SuppressWarningsClass(str1); System.out.println( "取得する値は" + swc1.StringA() + "です"); System.out.println( "取得する値は" + SuppressWarningsClass.StringA() + "です"); } } |
出力結果
取得する値はあいうえおです
取得する値はあいうえおです
@SuppressWarnings(“static-access”)アノテーションを付けることで、static変数にアクセスするときの警告を出さないようにしています。
また、MainクラスではClassSampleクラスをインスタンス化しても使用していますので、mainメソッドに@SuppressWarnings(“static-access”)アノテーションを付けています。
そして、Mainでは使用していない変数str2とインスタンスswc2に@SuppressWarnings(“unused”)アノテーションを付けることで、「変数を使用していないよ」という警告が発生しないようにしています。
Java7で追加されたアノテーション
Java7から「@safeVarargs」アノテーションが追加されました。
@safeVarargsは可変長引数を持つメソッドをコンパイルした際の警告を抑制するアノテーションであり、staticメソッド、finalインスタンス、コンストラクタのみに記述が可能となります。
元になるメソッド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) throws Exception { } @SafeVarargs public final <E> List<E> margeList(List<E>... lists) { ArrayList<E> newList = new ArrayList<E>(); for(List<E> listA: lists) { newList.addAll(listA); } return newList; } } |
@SafeVarargsをつけない場合はジェネリクス型は宣言はできますがインスタンスにできないことから警告が表示されてしまいますが、@SafeVarargsをつけることで警告を抑えることができ、コンパイルが通るようになります。
今回のポイント
アノテーションで付加情報を伝える
⚫︎ アノテーションとはコンパイラやツールに付加情報を伝える機能であ理。Javaを書くときに大切な情報をコメントできるものである
⚫︎ アノテーションをつけることは必須ではありませんが利用することで可読性があがる
⚫︎ アノテーションは@Deprecated、@Override、@SuppressWarningsという標準アノテーションがある
⚫︎ Java7で追加された@safeVarargsアノテーションは可変長引数を持つメソッドをコンパイルした際の警告を抑制するアノテーションである
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。