Java では、アノテーションはコンパイラーまたはランタイム システムにメタデータを提供するのに役立ちます。ただし、現在進行中の疑問は、アノテーションが実行時に動的に生成される値を受け入れられるかどうかです。
以下の試みでは、@MyInterface の aString 属性の文字列値を生成しようとしています:
<code class="java">@MyInterface(aString = MyClass.GENERIC_GENERATED_NAME) public class MyClass { static final String GENERIC_GENERATED_NAME = MyClass.generateName(MyClass.class); public static final String generateName(final Class<?> c) { return c.getClass().getName(); } }</code>
ただし、コンパイラはこれを次のエラー メッセージで拒否します:
The value for annotation attribute MyInterface.aString must be a constant expression
これは、注釈はコンパイル時に評価されますが、GENERIC_GENERATED_NAME は実行時まで不明であるためです。
目的の効果を達成するには、コンパイル時にgenerateNameメソッドを評価できるアノテーションプロセッサを作成する必要があります。ただし、Java では実行時にコードを動的に評価する機能がサポートされていないため、このソリューションには制限があります。
以上がJava アノテーションは実行時に動的に生成された値を受け入れることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。