我在注释中创建一些元数据结构时遇到问题。我们使用注释来定义hibernate实体属性的特殊属性,但它可以在任何地方使用。 我想创建代表这些结构的条件:
attribute1 = ...
OR
(attribute2 = ...
AND
attribute3 = ...)
问题是我需要使用这个注释来定义一些“树”结构。这是我想要达到的一些设计:
@interface Attribute {
... some attributes ...
}
@interface LogicalExpression {
}
@interface OR extends LogicalExpression {
Attribute[] attributes() default {};
LogicalExpression logicalExpressions() default {};
}
@interface AND extends LogicalExpression {
Attribute[] attributes() default {};
LogicalExpression logicalExpressions() default {};
}
@interface ComposedCondition {
Attribute[] attributes() default {};
LogicalExpression logicalExpressions() default {};
}
我想根据这个例子使用所有这些注释:
public class Table {
@ComposedCondition(logicalExressions = {
@OR(attributes = {@Attribute(... some settings ...)},
logicalExpressions = {
@AND(attributes = {@Attribute(...), @Attribute(...)})
})
}
private String value;
}
我知道我在上面的注释定义中定义的继承是不可能的。但是我怎样才能考虑我的注释和,或者在一个“家庭”中?
答案 0 :(得分:5)
请检查Why it is not possible to extends annotations in java?
但是您可以创建可以在注释上使用的元注释来创建注释组。
@LogicalExpression
@interface OR {
Attribute[] attributes() default {};
LogicalExpression logicalExpressions() default {};
}
但这对你的第二个问题没有帮助,即。使用LogicalExpression
作为父母。
但你可以做类似下面的事情。将LogicExpression
声明为enum
这样您就可以使用单个enum
和各种Attributes
来执行条件。
e.g。如果您要执行AND
,OR
条件,则可以通过LogicExpression.AND
,LogicExpression.OR
并使用orAttributes()
方法执行OR
条件和{ {1}}执行andAttributes()
条件
AND