1. ホーム

[解決済み】Javaでアノテーションの拡張ができないのはなぜですか?

2022-04-03 13:52:12

質問

Javaクラスと同じように、Javaアノテーションに継承がないのが理解できません。とても便利だと思うのですが。

例えば あるアノテーションがバリデータであるかどうかを知りたい。継承を使えば、スーパークラスを反射的にたどりつき、 このアノテーションが ValidatorAnnotation . そうでなければ、どのようにこれを実現すればよいのでしょうか。

では、どなたかこの設計上の判断の理由を教えてください。

解決方法は?

なぜそのような設計になっていないのか、その答えは JSR 175 デザインFAQに、こうあります。

アノテーションのサブタイピング(あるアノテーションタイプが別のアノテーションタイプを拡張すること)をサポートしないのはなぜですか?

アノテーションの型が複雑になる システムで、より多くの 特定のツール」を記述することは困難です。

...

「特定のツール" - クエリを実行するプログラム。 任意のアノテーションタイプが知られている 外部プログラム。スタブジェネレータ。 などがこのカテゴリーに入る。 これらのプログラムは、アノテーションされた クラスにロードすることなく 仮想マシンをロードしますが アノテーション・インターフェイス

そうそう、理由はただのKISSなんでしょうね。とにかく、この問題は (他の多くの問題とともに) の一部として検討されているようです。 JSR 308 が開発した、この機能を持つ代替コンパイラを見つけることもできます。 マティアス・リッケン .