検索

キーワード


【Java】アノテーションの役割とは?3つのタイプと標準アノテーションを紹介

  • 公開日:2020-09-18 16:49:35
  • 最終更新日:2021-01-26 09:21:38
【Java】アノテーションの役割とは?3つのタイプと標準アノテーションを紹介

こんにちは、駆け出しプログラマーの若江です!

ここでは初学者として学習を終えた私からアウトプットの意味も込めて、

アノテーションについて紹介させていただきます。

できる限り初学者が理解しやすい内容として紹介させていただくので、参考となれば幸いです!


関連記事リンク:継承とオーバーライドの紹介 / クラスの紹介 / メソッドの紹介 / 変数の紹介

アノテーションの基礎 ~アノテーションの基礎と標準アノテーション~

アノテーションは「注釈」を意味する Java での便利機能です。

プログラム自体はアノテーションが無くても動かすことができますが、

アノテーションを活用することでスムーズな開発を行うことができるようになります。

ここではアノテーション使い方や種類について紹介させていただきます。


アノテーションとは?

アノテーションとは注釈を意味し、他者を含む開発者が理解しやすいプログラムになることに加えて、

コンパイラや実行環境が処理を行うための目印にもなり、誤認識や記述ミスを防ぐことができます。

アノテーションは「@」を表記して記述されます。

・アノテーションの構文: @アノテーション名


「@アノテーション名」を修飾子としてクラス、変数やメソッドなど適切なものに付けることで、

アノテーションはその機能を発揮します。


アノテーションのタイプ

アノテーション自身が持つメソッド(もしくはフィールド)の数によって3つのタイプへ分かれます。

マーカーアノテーション

メソッドを持たないアノテーションです。

名前だけのアノテーションとも呼ばれています。

処理を持たないアノテーションのため「@アノテーション名」のように記述されます。


単一アノテーション

メソッドを1つ持つアノテーションです。

「@アノテーション名( ~ )」のようにデータを1つ保持する記述がされます。


フルアノテーション

メソッドを2つ以上持つアノテーションです。

「@アノテーション( ~, ~ )」のようにデータを複数保持する記述がされます。


標準アノテーション

アノテーションにはあらかじめ、たくさんの種類が用意されています。

自作でオリジナルのアノテーションを作ることも可能ですが、

多くの場合はあらかじめ用意されたアノテーションを使うことになります。

あらかじめ用意されたアノテーションは、ここでは紹介しきれないほど多いため、

今回はよく使われる「標準アノテーション」である

「@Override」「@Deprecated」「@SuppressWarnings」

の3つに注目して紹介させていただきたいと思います。



@Override アノテーション

オーバーライドしたメソッドの注釈で使われるマーカーアノテーションです。

チームにオーバーライドしたメソッドであることを伝えます。

コンパイラは @Override を目印にメソッドが正しくオーバーライドされているかチェックを行います。

誤字があったり不適切なオーバーライドをしている場合にコンパイルエラーを返します。


◆ @Override の使用例

【親クラス】 method と method2 メソッドを作成

public class AnnotationTest {

	public void method() {
	}
	public void method2() {
	}
}

【子クラス】 method と method2 をオーバーライド

public class AnnotationTest2 extends AnnotationTest {

	public void methob() {
		// 誤入力しているが、新たなメソッドとして判断される
	}

	@Override
	public void method() {
		// 正しくオーバーライドされているためエラーが出ない
	}

	@Override
	public void methob2() {
		// method2 を誤入力しているため、「そんなメソッドはない」とエラーが出る
	}
}


サンプルコードのように @Override を付ないで記述ミスした場合は、

オーバーライドしたいメソッドかどうかをコンパイラが判断できないため、

ミスした記述に従って新たなメソッドを作成します。


一方 @Override を付けて記述ミスした場合は、

オーバーライドしたいメソッドだということがわかるため、

コンパイラがチェックを行い「そのようなメソッドはない」と返しています。

このようにコンパイラのチェック機能が働くため、未然に記述ミスを防ぐことができます。



@Deprecated アノテーション

開発環境の変化などにより過去に使っていたメソッドやフィールドなどが、

使用非推奨となった場合の注釈として使われるマーカーアノテーションです。

使用不可ではなく「非推奨」のため使うことはできますが、

プロジェクトに変更があったことを意味するため、使用には注意が必要となります。


例えば、メソッド①は使わないようになって代わりにメソッド②を使うようになったが、

一部のクラスで古いメソッドを使わなくてはならないや、使う可能性がある。といったケースで使われます。


◆ @Deprecated の使用例

public class AnnotationTest {

	@Deprecated
	public void method() {
		// 古いメソッドのため使用非推奨
	}
	
	public void method2(int num) {
		// 古いメソッドの代わりに使うメソッド
	}
}



@SuppressWarnings

警告文の出るコーディングを意図的に行っているなどの状況で、

その警告文を表示させないようにしたい場合などで使用される単一アノテーションです。

@SuppressWarnings( "設定値" )」のように記述することで使うことができます。

@SuppressWarnings でよく使われる設定値には以下の種類があります。

cast:不要なキャストをしている

deprecation:非推奨なメンバーを利用している

unused:使われていないメンバーがある

ほか設定値も使用可能ですが、コンパイラや開発環境、バージョンによって使える設定値は異なります。


先ほどの @deprecated と @SuppressWarnings を組み合わせて、

非推奨なものを警告文なしで記述するサンプルコードを見てみましょう。


◆ @SuppressWarnings の使用例

【クラス①】 使用非推奨のメソッドを作成

public class AnnotationTest {

	@Deprecated
	public void method() {
		// 使用非推奨
	}
}

【クラス②】 @SuppressWarnings で警告文が出ないようにする

public class Test {

	@SuppressWarnings("deprecation")
	public static void main(String[] args) {

		AnnotationTest test = new AnnotationTest();
		
		test.method(); // 非推奨なメソッドを使用しているが警告が出ない
	}
}


使用非推奨なメソッドを使っていますが警告文が出なくなりました。

上記で使った @SuppressWarnings("deprecation") は警告を出したくない変数に直接付与するのではなく、

メソッド、もしくはクラスに付与しなくてはならない点に注意しましょう。



まとめ

アノテーションには多くの便利な機能が事前に用意されています。

使い方もシンプルで使いやすいので有効活用しましょう。

また先述で少し触れた自作アノテーションの方法も別記事で紹介させていただきます。

アノテーションの自作をお考えの方はご一読ください。


関連記事リンク

継承とオーバーライドの紹介 / クラスの紹介 / メソッドの紹介 / 変数の紹介





【著者】

若江

30代で異業種となるIT業界へ転職した駆け出しのプログラマです。これまで主に Java や Ruby、HTML/CSS を使って学習を目的としたショップサイトや掲示板サイトの作成を行いました。プログラマとしての経験が浅いからこそ、未経験者の目線に近い形で基礎の紹介をしていきたいと思います。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様