[英]Type hierarchy in java annotations
我在注解中创建一些元数据结构时遇到问题。 我们正在使用注释来定义休眠实体属性的特殊属性,但它可能在任何地方都可用。 我想创建代表这些结构的条件:
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;
}
我知道以上面的注释定义中定义的方式进行继承是不可能的。 但是,我怎么能将我的注释AND,或OR归入一个“家庭”?
但是,您可以创建可用于批注的元批注,以创建批注组。
@LogicalExpression
@interface OR {
Attribute[] attributes() default {};
LogicalExpression logicalExpressions() default {};
}
但这并不能帮助您解决第二个问题。 使用LogicalExpression
作为父级。
但是您可以执行以下操作。 将LogicExpression
声明为enum
这样,您可以使用单个enum
和各种Attributes
集来执行条件。
例如,如果要执行AND
OR
条件,则可以传递LogicExpression.AND
, LogicExpression.OR
并使用orAttributes()
方法执行OR
条件,并使用andAttributes()
执行AND
条件
public enum LogicExpression {
OR,AND,NOT;
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface ComposedCondition {
LogicExpression[] getExpressions() default {};
Attributes[] orAttributes() default {};
Attributes[] andAttributes() default {};..
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.