ホームページ  >  記事  >  Java  >  Java アノテーションに動的値を渡すことはできますか?

Java アノテーションに動的値を渡すことはできますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 08:28:02969ブラウズ

 Can You Pass Dynamic Values to Java Annotations?

Java アノテーションへの動的な値の提供

最初の試行と問題

Java では、アノテーションを使用してメタデータを提供しますクラス、メソッド、変数。シナリオによっては、注釈属性に動的な値を割り当てたい場合があります。ただし、メソッド呼び出しの結果などの非定数式をアノテーション属性に割り当てることは、一般に禁止されています。あなたが経験したように:

@MyInterface(aString = MyClass.GENERIC_GENERATED_NAME)

コンパイラは次のように警告します:

「注釈属性 MyInterface.aString の値は定数式である必要があります」

コンパイラの制限

この制限は、コンパイラによるコンパイル時の RetentionPolicy.RUNTIME アノテーションのアノテーション メタデータの評価に起因します。注釈属性に割り当てられる値は、コンパイル時に認識されている必要があります。

さまざまな保持ポリシー

Java は、注釈に対してさまざまな保持ポリシーを提供します。

  • RetentionPolicy.SOURCE: コンパイル時に破棄されます
  • RetentionPolicy.CLASS: クラス ファイルに含まれます
  • RetentionPolicy.RUNTIME: 実行時を通じて保持されます

解決

残念ながら、動的に生成された文字列値をアノテーションに提供するという目標を達成することは、コンパイラーの制限により不可能です。 RetentionPolicy.SOURCE も RetentionPolicy.RUNTIME もこれを許可しません。

以上がJava アノテーションに動的値を渡すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。