3

私はこのインターフェースを持っています:

public interface IDbTable extends Serializable
{
    public int getId();
}

IDbTableを実装するすべてのクラスに、アノテーション「@DatabaseTable」と、クラス内に「@DatabaseField」を持つフィールドを少なくとも1つ含めるように義務付ける必要があります。IDbTableを実装する唯一の方法は、次のようにする必要があります。

@DatabaseTable(tableName = "Something")
public static class TestTable implements IDbTable
{
            @DatabaseField
            public int id;

    public int getId()
    {
        return id;
    }
}

これはインターフェースまたは継承で可能ですか?今日、私はすべてのクラスをスキャンしてこの要件をチェックする単体テストを持っています。これは良い習慣ですか?

4

2 に答える 2

2

Javaのドキュメントによると、実装クラスによって継承されるインターフェースにアノテーションを適用することはできません:http: //docs.oracle.com/javase/6/docs/api/java/lang/annotation/AliExpress.html

注釈タイプが自動的に継承されることを示します。継承されたメタアノテーションがアノテーションタイプ宣言に存在し、ユーザーがクラス宣言でアノテーションタイプをクエリし、クラス宣言にこのタイプのアノテーションがない場合、クラスのスーパークラスは自動的にアノテーションタイプを照会されます。このプロセスは、このタイプのアノテーションが見つかるか、クラス階層の最上位(オブジェクト)に到達するまで繰り返されます。このタイプのアノテーションを持つスーパークラスがない場合、クエリは問題のクラスにそのようなアノテーションがないことを示します。

このメタアノテーションタイプは、アノテーション付きタイプがクラス以外のものにアノテーションを付けるために使用される場合は効果がないことに注意してください。このメタアノテーションは、アノテーションがスーパークラスから継承されるだけであることにも注意してください。実装されたインターフェースの注釈は効果がありません。

于 2012-05-11T20:58:51.250 に答える
0

アノテーション処理を使用して、必要なアノテーションがフレームワークに送信されるとき、またはビルド/デプロイ時にクラスに存在することを確認してみませんか。

于 2012-05-11T20:53:36.380 に答える