1. ホーム

[解決済み】Javaのアノテーションメンバーに使用できる型はどれですか?

2022-04-19 13:59:24

質問

今日、私は最初のアノテーション・インターフェイスを次のように作成したいと思いました。 このドキュメント というコンパイラーエラーが発生しました。

Invalid type for annotation member":
public @interface MyAnnotation {
    Object myParameter;
    ^^^^^^
}

明らかに Object は、アノテーションメンバーの型として使用できません。残念ながら、一般的にどのような型が使用できるのかについての情報は見つかりませんでした。

これは試行錯誤の末に見つけたものです。

  • String → 有効
  • int → 有効
  • Integer → 無効(意外と知られていない)
  • String[] → 有効(意外と知られていない)
  • Object → 無効

どなたか、どの型が実際に許可されているのか、またその理由を教えてください。

解決方法は?

で指定されています。 JLS 9.6.1項 . アノテーションメンバータイプは、以下のいずれかでなければならない。

  • プリミティブ
  • 文字列
  • Enum
  • 別のアノテーション
  • クラス
  • 上記のいずれかの配列

制約が多いように見えますが、理由があるのは間違いないでしょう。

また、多次元配列(例えば String[][] は、上記のルールで暗黙のうちに禁止されています。

で説明されているように、Classの配列は許可されません。 この回答 .