Java

【初心者向け】Javaのアノテーションの使い方を解説!代表例から自作方法まで

「Javaのアノテーションってどうやって使うのだろう? 使うメリットは何? 誰か教えてほしい」

本記事はこのような悩みを解決します。

アノテーションはわざとエラーを出してプログラムミスを抑制するためのものですが、初心者にはわかりにくいのではないでしょうか。わざとエラーを出す意味がつかみにくいのです。
しかし、アノテーションは慣れてくると便利なものですし、実務で使われることも多いので、ぜひ覚えておきたいところです。

そこで本記事ではアノテーションについて1から解説していきます。アノテーションとは何か? 使うメリット、具体的な使用方法は? といったことについて説明していきます。

本記事を読むことでアノテーションに関する基礎を固めることができるので、Java初心者の方はぜひ読んでみてくださいね。

アノテーションとは

アノテーションとは日本語で「注釈」という意味です。Javaではコンピューターに対してソースコードだけでは命令しきれない情報を伝えるために使用します。

アノテーションを使うことで、わざとエラーを出力させたり、プログラムの動作を変更させたりと、色々なことが行えます。

アノテーションには大きく分けて3種類のパターンが存在します。

  • 特にデータを持たないアノテーション
  • データを1つ持つ単一アノテーション
  • データを複数持つフルアノテーション

アノテーションは実務レベルではほぼ必ずといっても良いぐらいに使われています。

アノテーションを使うメリット

アノテーションを使うメリットはいくつかあります。
代表的なメリットには次のようなものがあります。

  • スペルミスをしたときにエラーを出せる
  • メソッドやクラス名を間違えたときにエラーを出せる
  • 他のプログラマーに「ここはこういう風に書いて」と指示を出せる

ソースコードは人間の手で記述するので、どうしてもスペルミスなどが起こる可能性があります。そこでアノテーションを利用してスペルミスがあった場合にエラーを出力するようにすれば安心ですよね。

また、アノテーションを使ってある程度コードの書き方を制限することによって、他のプログラマーに「ここはこういう風に書いて」と指示を出せます。特にJavaは大人数で開発することが多いので、ソース内でうまくコミュニケーションを取ることが重要なのです。

アノテーションにはこのようなメリットがあるため、今日でも数多くの企業が使っています。

アノテーションの種類

実はアノテーションはそこまで種類が多いわけではありません。
代表的なアノテーションは次の3つです。

  • Override
  • Deprecated
  • SuppressWarnings

とりあえずこれら3つを使えるようになれば初心者は問題ありません。

それでは1つ1つの書き方や意味について見ていきましょう。

Override

Overrideをつけると「必ずメソッドをオーバーライドしてください」と指定することが可能です。Overrideアノテーションをつければ、スペルミスなどを抑制できます。

public class Test extends TestOverride {
 
           @Override
           public void outputs() {
                            System.out.println(“Hello World!”);
           }
 
           public static void main(String[] args) {
                      TestOverride cl = new TestOverride();
                      cl.output();
           }
}
 
public class TestOverride {
 
           public void output() {}
}

◯実行結果

Documents $ 1java test.java
test.java:3: エラー:メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません
           @override
           ^
エラー1個
エラー:コンパイルが失敗しました
Documents $ 1

このコードでは、outputsメソッドの上に@Overrideをつけています。こうすることで、outputsメソッドをオーバーライドしないといけなくなります。

ところが、TestOverrideクラスでは「outputs」ではなく、間違って「output」と書いてしまいました。そのため、オーバーライドできずエラーが発生したのです。

public class Test extends TestOverride {
 
           @Override
           public void outputs() {
                      System.out.println(“Hello World!”);
           }
 
           public static void main(String[] args) {
                      TestOverride cl = new TestOverride();
                      cl.outputs();
           }
}
 
public class TestOverride {
 
           public void outputs() {}
}

◯実行結果

Documents $ 1java test.java
Documents $ 1

スペルミスに気がつき、「outputs」に修正しました。するとエラーが出なくなりました。

このように、@Overrideを使うことによってメソッド名を書き間違えた場合にエラーを出せるため、プログラムのバグを減らせます。

Deprecated

Deprecatedは「このメソッドやクラスは非推奨です」というエラーを出すために使います。

public class Test {
 
           public static void main(String[] args) {
                      new Test2().testMethod();
           }
}
 
class Test2 {
           @Deprecated
           public void testMethod(){}
}

◯実行結果

Documents $ 1java test.java
注意 :test.javaは推奨されないAPIを使用またはオーバーライドしています。
注意 :詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
Documents $ 1

この例では、Test2クラスのtestMethodメソッドに@Deprecatedをつけています。こうすることによってtestMethodメソッドは非推奨となり、エラーが出るようになりました。

@Deprecatedを外せばエラーは出なくなります。

public class Test {
    public static void main(String[] args) {
       new Test2().testMethod();
    }
}
 
class Test2 {
          public void testMethod(){}
}

◯実行結果

Documents $ 1java test.java
Documents $ 1

このようにエラーを出すことで、他のプログラマーに「このメソッドは使わないでね」と指示を出すことができます。

SuppressWarnings

SuppressWarningsは、コンパイラに警告を出させないようにするアノテーションです。

通常、よくない書き方をした場合にはコンパイル時に警告が出て、実行することができません。ところがSuppressWarningsを使うと、強引に実行することができるのです。

SuppressWarningsは、()の中に前提値を入れることによって、特定の警告を出さないようにしてくれます。

@SuppressWarnings(“cast”) // 不要なキャストをしている
@SuppressWarnings(“deprecation”) // 非推奨のメンバーを使用
@SuppressWarnings(“divzero”) // ゼロ除算をしている 例: 4 / 0
@SuppressWarnings(“unused”) //使っていない変数がある

このように記述することで、特定の警告を抑制できます。

本来エラーが出るべきところを無理やり実行させてしまうわけなので、初心者が安易にSuppressWarningsを使うのはおすすめできません。@SuppressWarningsアノテーションを使う場合は、先輩プログラマーに相談したり、自分でよく考えたから使用したりした方が良いですね。

アノテーションを自作するには

先ほど解説した通り、あらかじめJavaに用意されているアノテーションはあまり多くありません。

しかし、実はアノテーションは自分で作ることができるのです。必要に応じて新しく定義することが可能であり、どんな目的で使用するかも指定することができます。

実務では、標準に用意されているアノテーションを使うことよりも、むしろアノテーションを自作することの方が多いです。

そこでここではアノテーションを自作する方法を紹介します。
アノテーションを自作するには、まずアノテーションライブラリをimportしないといけません。

import java.lang.annotation.*;

実際に自作したアノテーションを用いたソースコードを見ていきましょう。

import java.lang.annotation.*;
 
public class Test {
          // このメソッドの作成者はTANAKAであることを示す
          @author(“TANAKA”)
          public static void main(String [] args) {
          }
}
 
// アノテーションをクラスに適用したいので、ElementType.TYPE を指定している
@Target(ElementType.TYPE)
 
// Targetによってauthorアノテーションはクラスに適用される
@interface author { String value(); }

◯実行結果

Documents $ 1java test.java
test.java:5:エラー:注釈型はこの種類の宣言に使用できません
          @author(“TANAKA”)
          ^
エラー1個
エラー:コンパイルが失敗しました
Documents $ 1

このコードでは「@author」という自作アノテーションと、「@Target」というアノテーションが使われています。

Targetアノテーションは、他のアノテーションが「何に適用されるか」を示すものです。今回の例では、Targetアノテーションはauthorアノテーションがクラスに適用されるように指定しています。

今回定義したauthorアノテーションは、ソースコードの作成者を明示するために使用しています。今回の例では、mainメソッドの作成者が田中さんであることを明示しています。

しかしながら、Targetアノテーションでメソッドではなくクラスに適用するように制限されているため、上記のコードはエラーとなります。

上記のコードをエラーが出ないようにするには次のようにします。

import java.lang.annotation.*;
 
// このクラスの作成者はTANAKAであることを示す
@author(“TANAKA”)
public class Test {
           public static void main(String [] args) {
           }
}
 
// アノテーションをクラスに適用したいので、ElementType.TYPE を指定している
@Target(ElementType.TYPE)
 
// Targetによってauthorアノテーションはクラスに適用される
@interface author { String value(); }

◯実行結果

Documents $ 1java test.java
Documents $ 1

新しいコードでは、Testクラスの作成者が田中さんであることを示しています。これなら、Targetアノテーションで制限した通りなのでエラーは出ません。

このようにして、アノテーションは好きなように自作して、活用できるのです。
なお、アノテーションを自作する際によく使われているアノテーションは以下の3つです。

  • @Target:他のアノテーションに対して「何に適用されるか」を示す
  • @interface:アノテーションを宣言する
  • @Retention:アノテーションの読み込みタイミングを指定する

まとめ

本記事ではアノテーションについて解説しました。アノテーションはどんなものなのか、具体的な使い方はどういったものなのか、おわかり頂けたでしょうか?

改めて、代表的な3つのアノテーションをおさらいしましょう。

  • Override
  • Deprecated
  • SuppressWarnings

こうしたアノテーションを使いこなすことによって、ソースコードの書き方を制限でき、余計なミスをなくすことができます。余計なミスをなくせば、バグのないアプリケーションを作成できてクライアントからの評価も上がりますので、いかにアノテーションを活用するかは企業にとって重要です。

みなさんもぜひアノテーションを使いこなせるようになってくださいね。

本記事がJava初心者の方にとって有意義なものとなれば幸いです。

プログラミングの家庭教師『Tech Teacher』


引用元:Tech Teacher

「スクールに通い続ける自信がない…」
「時間がなくてスクールに通えない…」

そんな方にはプログラミングの家庭教師『Tech Teacher』がおすすめです。
Tech Teacherはマンツーマン指導なので、生徒様一人ひとりに最適な指導を行うことができます。また、オンライン指導も可能なので、全国どこにいても家庭教師の授業を受けることができます。

Tech Teacherの3つの特徴


生徒様に最適化されたマンツーマン指導
完全マンツーマンの指導なので、生徒様の目的・学習状況・ご要望に合わせて、最適な指導をご提供いたします。

指導力・人柄・相性の優れた教師のご紹介
Tech Teacherには採用率20%の選考を突破した、指導力の高い教師が在籍しています。また、選考では指導力だけではなく人柄も重視しております。

1,000人の教師が在籍!幅広い指導に対応可能
業界トップレベルの1,000人の教師が在籍しています。そのため、幅広い言語・ツール・目的に対応することができます。

家庭教師ならではの5つの魅力


オーダーメイドのカリキュラム
生徒様一人ひとりに習熟度・目的・期間に応じて最適なカリキュラムを提供いたします。

きめ細やかなフォローが可能
生徒様からのご要望にきめ細やかに対応し、学習計画や勉強法などの指導もできるので、普段の勉強も捗ります。

習い事・学業・お仕事との両立が簡単
教室に通う必要がないので親御様の送迎も不要です。授業時間・頻度を生徒様のご都合に合わせて自由に調節することができます。

自分のペースで進められる
生徒様の理解度や意欲に応じて授業のスピードを調節できます。不明点や疑問点は都度立ち止まって解消できるので、着実に理解して進むことができます。

すぐ質問できるから挫折しない
先生を独り占めできるので、周りの目を気にすることなく分からないところをいつでも質問できます。

Tech Teacherへのお問い合わせ

無料体験授業・資料請求のお問い合わせはこちらから

質問のみのお問い合わせも受け付けております。