アノテーションそのものは、単なる名前と型の定義にすぎませんので、指定されたアノテーションに応じてどのような処理を実施するかを決めるのは、呼び出し元の責任です。
アノテーション情報は、Method#getAnnortationメソッドで取得できます。Methodオブジェクトを取得するのは、Class#getMethodメソッドの役割です。(※)
※これらクラスやそのメンバーにアクセスするための機能をリフレクションと言います。
AnnotationSample.java
- package com.example.mynavi.object;
- import java.lang.reflect.Method;
- public class AnnotationSample {
- @Version(1.0)
- public void annotationTest() {
- System.out.println("Released");
- }
- public static void main(String[] args) {
- try {
- // annotationTestメソッドを取得
- var m = AnnotationSample.class.getMethod("annotationTest");
- // Versionアノテーションを取得
- var v = m.getAnnotation(Version.class);
- // Versionアノテーションが1.0以上の場合のみメソッドを実行
- if (v.value() >= 1.0) {
- m.invoke(AnnotationSample.class.getDeclaredConstructor().newInstance());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
この例であれば、取得したValueアノテーションの値が1.0以上の場合に、アノテーションが付与されたメソッド(ここではannotationTest)を実行します。Methodオブジェクト経由でメソッドを実行するには、invokeメソッドを利用します。
監修
山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。