ホームページ > Java > &#&チュートリアル > 実行時にクラス定義のアノテーション文字列パラメータを変更するにはどうすればよいですか?

実行時にクラス定義のアノテーション文字列パラメータを変更するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-13 11:47:10
オリジナル
854 人が閲覧しました

How Can I Modify a Class Definition's Annotation String Parameter at Runtime?

実行時にクラス定義のアノテーション文字列パラメータを変更する

概要

プリコンパイルされたクラスがインポートされ、クラスパスの一部であるシナリオでは、実行時に注釈文字列パラメータを変更することが望ましい場合があります。この記事では、これを実現するために考えられるアプローチを検討します。

解決策

特定のアノテーションの特定のキーのアノテーション値を変更するには、以下の手順に従います。

  1. 次を使用してアノテーションの呼び出しハンドラーを取得します。 Proxy.getInvocationHandler(annotation):

    Object handler = Proxy.getInvocationHandler(annotation);
    ログイン後にコピー
  2. 宣言されたフィールドにアクセスし、そのアクセシビリティを true に設定することにより、ハンドラーから memberValues フィールドを取得します:

    Field f = handler.getClass().getDeclaredField("memberValues");
    f.setAccessible(true);
    ログイン後にコピー
  3. memberValues をmap:

    Map<String, Object> memberValues = (Map<String, Object>) f.get(handler);
    ログイン後にコピー
  4. キーを使用してマップから古い値を取得します:

    Object oldValue = memberValues.get(key);
    ログイン後にコピー
  5. 新しい値でマップを更新します:

    memberValues.put(key, newValue);
    ログイン後にコピー

の使用法例

次のアノテーション付きクラスについて考えます。

@ClassAnnotation("class test")
public static class TestClass {
    @FieldAnnotation("field test")
    public Object field;
    
    @MethodAnnotation("method test")
    public void method() {}
}
ログイン後にコピー

実行時にアノテーション値を変更するには、次のコードを使用します。

Field field = TestClass.class.getField("field");
final FieldAnnotation fieldAnnotation = field.getAnnotation(FieldAnnotation.class);
System.out.println("old FieldAnnotation = " + fieldAnnotation.value());
changeAnnotationValue(fieldAnnotation, "value", "another field annotation value");
System.out.println("modified FieldAnnotation = " + fieldAnnotation.value());
ログイン後にコピー

このアプローチにより、動的に新しいアノテーション インスタンスを作成せずにアノテーション パラメータを変更できるため、具体的なアノテーション クラスについての事前知識の必要性が軽減されます。

以上が実行時にクラス定義のアノテーション文字列パラメータを変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート