2017-11-02 5 views
0

このアノテーションで飾られたメソッドをオーバーライドするときにカスタムJavaアノテーションを持ち越して表示できる方法を探しています。オーバーライド時にカスタムJavaアノテーションを持ち越して表示する

@Retention(RetentionPolicy.SOURCE) 
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER }) 
public @interface SeeMe { 

} 

とそれにメソッドを飾る考えてみます:

私は上記をオーバーライドするとき、私はこの@SeeMeアノテーションは持ち越さと示されていることができますどのように
@SeeMe 
public void iSeeYou() { 
    // Do something 
} 

は、このカスタム注釈を持つ考えてみましょう方法?

@Override 
@SeeMe 
public void iSeeYou() { 
    super.iSeeYou(); 
} 

基本的には、@ Nullableアノテーションと@NonNullアノテーションが達成するのと同じ効果が必要です。

答えて

0

アノテーションプロセッサの作成者は、アノテーションが継承されているかどうかなど、アノテーションのセマンティクスを定義しています。

  • 作者は注釈プロセッサを記述して注釈を継承することができるため、注釈の数を減らす必要があります。
  • 注釈プロセッサは、注釈を継承しないように書くことができるので、すべてのスーパークラスも読み取る必要はなく、クラスだけを見ればクラスの意味が明らかになります。

いずれも防衛的な選択です。私は後者に向かって傾いている傾向があります。なぜなら、読みやすさが向上し、コードは書かれたよりも頻繁に読み込まれるからです。

動作を変更する場合は、@SeeMeを処理する注釈プロセッサのセマンティクスを変更する必要があります。 (まだアノテーションプロセッサがない場合はアノテーションプロセッサを作成してください。アノテーションプロセッサがない場合は継承されません)

+0

数日前にアノテーション処理を検討しています。その方向。あなたは私が探しているものをもっと具体的にできますか?私はコード生成に関するリソースを見つけることができますが、私が求めたものを達成するのに役立つものは何もありません。 – Izi

+0

Web上のアノテーション処理に関するチュートリアルがたくさんあります。新しいコードを作成するのではなく、コードの正確性を保証するアノテーションプロセッサの例は、[Checker Framework](https://checkerframework.org/)です。私はこれがあなたが探しているものなのかどうか分からない。なぜなら、あなたの目標が何であるかまだ言わなかったし、あなたが今までに見つけたことを言っていないからだ。 – mernst

関連する問題