7

次のような Java アノテーションを作成しました。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)  // can I further limit this to only fields of type DomainObject?
public @interface Owns {
}

簡単に見回した後、特定のタイプのフィールドのみに注釈を付けることができるように、この注釈の使用をさらに制限する方法があるかどうかを確認できませんでした。このアノテーションはドメインに合わせたものであり、基本ドメイン オブジェクト クラスのインスタンスでのみ使用できます。

コンパイル時にこれを強制する方法を知っている人はいますか?

助けてくれてありがとう!

4

2 に答える 2

8

アノテーション プロセッサでエラーが発生する可能性があります( Java 5 のサポートが必要な場合は、プライベート APIを使用する必要があります)。init に渡されたProcessorEnvironmentから取得したMessagerを使用できます。

これがどれほど効果的かは、ツール チェーンによって異なります。コマンド ラインまたはビルド スクリプトを介してjavacを使用してコンパイルすれば問題ありません。私のバージョンの Eclipse では、(プロジェクト設定を介して) プロジェクトに対して手動で注釈プロセッサを有効にする必要があり、エラーは明らかな場所には表示されませんでした。( JDT注釈プラグインには、カスタム サポートを提供したい場合に IDE とのより良い統合を可能にする拡張ポイントがあります。)特に、任意の開発環境をサポートする必要がある場合は、一般的に使用されるツールで確認することをお勧めします。

于 2008-12-18T18:47:05.683 に答える
0

これはコンパイル時に強制できないと思います - 不適切なフィールドにないことを確認したい場合は、実行/ロード時にチェックする必要があります。

于 2008-12-18T17:49:48.467 に答える