3

I have this interface:

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

I need to obligate all the classes that implements IDbTable, to have an annotation "@DatabaseTable" and at least one field inside class that have "@DatabaseField". The only way of implementing IDbTable needs to be like this:

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

    public int getId()
    {
        return id;
    }
}

Is this possible with interface or inheritance? Today i have an unit test that scan all the classes and check this requirements. Is this a good practice?

4

2 回答 2

2

根据 Java 文档,您不能将注释应用于将由实现类继承的接口:http: //docs.oracle.com/javase/6/docs/api/java/lang/annotation/Inherited.html

指示注释类型是自动继承的。如果注解类型声明中存在 Inherited 元注解,并且用户在类声明中查询注解类型,并且类声明没有该类型的注解,则将自动查询该类的超类以获取注解类型。将重复此过程,直到找到此类型的注释,或到达类层次结构(对象)的顶部。如果没有超类具有此类型的注释,则查询将指示所讨论的类没有此类注释。

请注意,如果注释类型用于注释类以外的任何内容,则此元注释类型无效。另请注意,此元注释仅导致注释从超类继承;已实现接口上的注释无效。

于 2012-05-11T20:58:51.250 回答
0

为什么不使用注释处理来检查所需的注释在发送到您的框架时是否存在于您的类中,或者在构建/部署时。

于 2012-05-11T20:53:36.380 回答