工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Javaアノテーションタイプ完全ガイド:事前定義・カスタム・メタアノテーション

Javaアノテーションタイプ

Javaアノテーション(事前定義、カスタム、メタ)を明確な例とともに解説します。

Javaアノテーションはソースコードの要素を記述するメタデータです。Java SEプラットフォームには標準アノテーションが用意されており、開発者はプロジェクト固有のカスタムアノテーションを作成できます。アノテーション自体にもアノテーションを付けられ、これをメタアノテーションと呼びます。

アノテーションは3つのカテゴリに分類されます:

  1. 事前定義アノテーション – Javaプラットフォームに組み込み済み
  2. カスタムアノテーション – 開発者が特定のニーズ向けに定義
  3. メタアノテーション – 他のアノテーションに適用されるアノテーション

事前定義アノテーションタイプ

1. @Deprecated

@Deprecatedマーカーは、クラス、メソッド、フィールドなどが廃止予定で、より新しい代替があることを示します。非推奨要素を使用するとコンパイラが警告を出します。

構文:

@Deprecated public void oldMethod() { ... }

Javadocでは@deprecatedタグで文書化します:

/** * @deprecated * Use {@link #newMethod()} instead. */ @Deprecated public void oldMethod() { ... }

例

class Main { /** * @deprecated * This method is deprecated and has been replaced by newMethod() */ @Deprecated public static void deprecatedMethod() { System.out.println("Deprecated method"); } public static void main(String[] args) { deprecatedMethod(); } }

出力

Deprecated method

2. @Override

@Overrideは、メソッドがスーパークラスやインターフェースのメソッドをオーバーライドする意図であることを示します。必須ではありませんが、シグネチャの不一致などをコンパイル時に検出できます。

例

class Animal { public void display() { System.out.println("I am an animal"); } } class Dog extends Animal { @Override public void display() { System.out.println("I am a dog"); } public void printMessage() { display(); } } class Main { public static void main(String[] args) { Dog dog1 = new Dog(); dog1.printMessage(); } }

出力

I am a dog

3. @SuppressWarnings

このアノテーションは、コンパイラに特定の警告カテゴリを無視させます。よく使われるのはdeprecationとuncheckedです。

使い方:

@SuppressWarnings("deprecation")

複数カテゴリ:

@SuppressWarnings({"deprecation", "unchecked"})

例

class Main { @Deprecated public static void deprecatedMethod() { System.out.println("Deprecated method"); } @SuppressWarnings("deprecation") public static void main(String[] args) { Main depObj = new Main(); depObj.deprecatedMethod(); } }

出力

Deprecated method

4. @SafeVarargs

final、static、またはprivateなメソッドおよびコンストラクタに適用し、そのメソッドがvarargsパラメータに対して安全でない操作を行わないことを表明します。これによりvarargs関連の非検査警告が抑制されます。

例

import java.util.*; class Main { @SafeVarargs private static void displayList(List<String>... lists) { for (List<String> list : lists) { System.out.println(list); } } public static void main(String[] args) { List<String> universityList = Arrays.asList("Tribhuvan University", "Kathmandu University"); List<String> programmingLanguages = Arrays.asList("Java", "C"); displayList(universityList, programmingLanguages); } }

出力

[Tribhuvan University, Kathmandu University] [Java, C]

5. @FunctionalInterface

Java 8で導入。インターフェースを関数型インターフェース(抽象メソッドが1つだけのインターフェース)として指定します。コンパイラがこの制約を検証します。

例

@FunctionalInterface public interface MyFuncInterface { void firstMethod(); // abstract }

2つ目の抽象メソッドを追加するとコンパイルエラーになります:

@FunctionalInterface public interface MyFuncInterface { void firstMethod(); void secondMethod(); // compile‑time error }

複数のdefaultやstaticメソッドは許可されます。

@FunctionalInterface public interface MyFuncInterface { void firstMethod(); default void secondMethod() { /* ... */ } default void thirdMethod() { /* ... */ } }

カスタムアノテーション

開発者はアプリケーション固有の要件に合わせたアノテーションを作成できます。構文は@interfaceを使い、要素メソッドにデフォルト値を指定できます。

構文

@interface AnnotationName { ElementType elementName() default defaultValue; }

例

@interface MyCustomAnnotation { String value() default "default value"; } class Main { @MyCustomAnnotation(value = "programiz") public void method1() { System.out.println("Test method 1"); } public static void main(String[] args) { new Main().method1(); } }

出力

Test method 1

メタアノテーション

メタアノテーションは、他のアノテーションの振る舞いを設定します。

1. @Retention

アノテーションの可視性スコープを定義:SOURCE、CLASS、RUNTIME。

@Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { }

2. @Documented

生成されるJavadocにアノテーションが含まれるようにします。

@Documented public @interface MyAnnotation { }

3. @Target

アノテーションを適用できるプログラム要素を制限します。

@Target(ElementType.METHOD) public @interface MyAnnotation { }

要素タイプにはANNOTATION_TYPE、CONSTRUCTOR、FIELD、LOCAL_VARIABLE、METHOD、PACKAGE、PARAMETER、TYPEがあります。

4. @Inherited

スーパークラスに付いたアノテーションをサブクラスが継承できるようにします。

@Inherited public @interface MyAnnotation { }

5. @Repeatable

同じ要素に同じアノテーションを複数回付けられるようにします。コンテナアノテーションが必要です。

@Repeatable(Universities.class) public @interface University { String name(); } public @interface Universities { University[] value(); }

使用例:

@University(name = "TU") @University(name = "KU") private String uniName;

実行時にアノテーションデータにアクセスするには、リフレクションAPIのgetAnnotationsByType()またはgetAnnotations()を使用します。

Java

  1. Javaプリミティブデータ型:例付き完全ガイド
  2. Java演算子をマスター:種類、構文、実践例
  3. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  4. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  5. Javaアノテーション完全ガイド:種類、配置場所、実践例
  6. Javaアノテーションタイプ完全ガイド:事前定義・カスタム・メタアノテーション
  7. Java String.charAt()完全解説:構文、戻り値、例外、実例
  8. Java String.endsWith()マスター:文字列サフィックスチェック実例付き
  9. Java文字列置換マスター:replace()、replaceAll()、replaceFirst()徹底解説
  10. Java変数の種類:ローカル、インスタンス、クラス変数を徹底解説
  11. Java修飾子完全ガイド:アクセス/非アクセス修飾子の種類と使い分け