1. ホーム
  2. java

[解決済み] javaでAnnotation Inheritanceのようなものはあるのでしょうか?

2022-02-25 16:54:39

質問

アノテーションを調べていて、いくつかのアノテーションに階層があるように見える点に行き着きました。

私は、アノテーションを使って、Cardのコードをバックグラウンドで生成しています。カードにはさまざまな種類がありますが(したがってコードもアノテーションも異なります)、名前のような共通する要素もあります。

@Target(value = {ElementType.TYPE})
public @interface Move extends Page{
 String method1();
 String method2();
}

そして、これが共通のAnnotationとなる。

@Target(value = {ElementType.TYPE})
public @interface Page{
 String method3();
}

上記の例では、Moveがmethod3を継承しているはずですが、extendsはアノテーションでは有効ではないという警告が表示されます。アノテーションが共通のベースとなるものを継承するようにしたかったのですが、うまくいきません。これは可能なのでしょうか、それとも単に設計上の問題なのでしょうか?

どうすればいいですか?

残念ながら、そうではありません。 どうやら、クラスのアノテーションをわざわざ読み込まずに読み込むプログラムに関係があるようです。 以下を参照してください。 なぜJavaではアノテーションを拡張できないのですか?

ただし、型はスーパークラスのアノテーションを継承し、そのアノテーションが @Inherited .

また、それらのメソッドが対話する必要がなければ、アノテーションをクラスに積み重ねるだけでよいでしょう。

@Move
@Page
public class myAwesomeClass {}

何かうまくいかない理由があるのでしょうか?