我有这个界面:
public interface IDbTable extends Serializable
{
public int getId();
}
我需要强制实现IDbTable的所有类,要有一个注释“@DatabaseTable”,并且类中至少有一个具有“@DatabaseField”的字段。 实现IDbTable的唯一方法是这样:
@DatabaseTable(tableName = "Something")
public static class TestTable implements IDbTable
{
@DatabaseField
public int id;
public int getId()
{
return id;
}
}
接口或继承是否可行? 今天我有一个单元测试,扫描所有类并检查这个要求。这是一个好习惯吗?
答案 0 :(得分:2)
根据Java文档,您无法将注释应用于将由实现类继承的接口:http://docs.oracle.com/javase/6/docs/api/java/lang/annotation/Inherited.html
表示自动继承注释类型。如果 继承的元注释存在于注释类型上 声明,用户查询类的注释类型 声明,类声明没有注释 类型,然后将自动查询类的超类 注释类型。将重复此过程直到注释 找到此类型,或者类层次结构(Object)的顶部是 到达。如果没有超类具有此类型的注释,那么 查询将指示有问题的类没有这样的注释。
请注意,如果带注释,则此元注释类型无效 type用于注释除类之外的任何内容。另请注意 这个元注释只会导致注释继承自 超; 对已实现接口的注释无效。
答案 1 :(得分:0)
为什么不使用注释处理,在发送到框架时,或在构建/部署时检查类中是否存在所需的注释。