2013-09-06 14 views
9

私が求めている質問が本当に愚かなのか分かりません。しかしここにあります:特定のデータ型に適用される注釈

私は、特定のタイプに適用可能なカスタム注釈を書きたいと思います。私はクラスAを持っている場合たとえば、その後、私はこのようなA.

何かのオブジェクトに適用することができ、注釈がしたい:

@Target({ElementType.FIELD, //WHAT_ELSE_HERE_?}) 
public @interface MyAnnotation { 
    String attribute1(); 
} 

public class X { 
    @MyAnnotation (attribute1="...") //SHOULDN'T BE POSSIBLE 
    String str; 
    @MyAnnotation (attribute1="..") //PERFECTLY VALID 
    A aObj1; 
    @MyAnnotation (attribute1="...") //SHOULDN'T BE POSSIBLE 
    B bObj1; 
} 

を可能なすべてのことですか?

+0

できません。しかし、なぜあなたはそれをしたいですか? –

+0

あなたが望むものを達成するために私が持っている提案をチェックしてください。 –

+0

NarendraPathaiと@hexafractionに感謝します。私はそれを期待していましたが、私が知っているものの外に何かがあるかもしれないとまだ楽観的に考えていました。 – Mubin

答えて

8

できません。 @TargetElementType[]を使用し、ElementTypeは列挙型なので変更できません。特定のフィールドタイプのみを考慮する必要はありません。

ただし、実行時にアノテーションを破棄したり、実行時の例外を発生させることはできます。

5

は、Javaではではありません。

ランタイムの前にアノテーションの正確性をチェックする場合は、annotation processorを独自に作成することもできます。

注釈処理(ソースコード、バイトコード をemmiting コンパイラエラー、コンパイラの警告を生成することによって..)ユーザ定義の注釈の ソースコードを分析した後、処理するために、コンパイル処理にフックです。

A basic tutorial on Annotation Processing

+0

私はカスタムの注釈プロセッサを持っていますが、興味のないフィールドの注釈も破棄していますが、それよりはるかに単純なアプローチです。 – Mubin

関連する問題