当前位置: 首页 > 知识库问答 >
问题:

java注释中的类型层次结构

督弘化
2023-03-14

我在注释中创建一些元数据结构时遇到了问题。我们使用注释来定义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;

}

我知道我在上面的注释定义中定义的那种继承是不可能的。但是,我该如何考虑我的注释和,或是在一个“家庭”中?

共有1个答案

赵征
2023-03-14

请检查为什么不能在java中扩展注释?

但是您可以创建元注释,这些注释可用于注释以创建注释组。

    @LogicalExpression
@interface OR {
    Attribute[] attributes() default {};
    LogicalExpression logicalExpressions() default {};
}

但这对你的第二个问题没有帮助,即作为父母使用逻辑表达式(LogicalExpression)。

但是你可以做如下的事情。将LogicExpression声明为enum,这样您可以使用单个enum和各种属性集来执行条件。

例如,如果你想执行ANDOR条件,那么你可以传递LogicExpress。ANDLogicExpress。或并使用orAtorites()方法执行OR条件和andAtorites()执行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 {};..
}
 类似资料:
  • 本文向大家介绍Java注释的类型。,包括了Java注释的类型。的使用技巧和注意事项,需要的朋友参考一下 Java支持单行,多行注释和文档注释。Javadoc工具可以理解文档注释,并可用于创建基于HTML的文档。 / **被称为文档注释。Javadoc工具在为程序代码创建文档时使用它。 / *用于多行注释。 //用于单行注释 示例

  • 我正在阅读有关java注释的信息,出现了一个新的疑问。 在文档中解释功能接口注释类型: 带有一个抽象方法声明的接口称为函数式interface.The编译器验证所有使用@FunctionalInterface注释的接口是否真正包含一个且仅包含一个抽象方法。如果使用此注释注释的接口不是函数式接口,则会生成编译时错误。在类、注释类型和枚举上使用此注释也是编译时错误。FunctionalInterfac

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 问题内容: 从Java 8开始,我知道类加载器的层次结构如下: Bootstrap类加载器→扩展类加载器→应用程序类加载器 Java 9中的类加载器的层次结构发生了什么变化,它如何起作用? 问题答案: 在 Java中,9个州修订如下: Java运行时具有以下内置的类加载器: :虚拟机的内置类加载器通常表示为null,并且没有父级。 :为了允许升级/覆盖定义到平台类加载器的模块,以及允许升级的模块读

  • 我有以下Java问题 我有以下通用类,它们可能被描绘为: 其中

  • 我正在编写一个注释处理器来在编译时执行以下检查: 有一个接口 有一个注释<code>Apply<code>用于注释方法 用注释的方法应被称为,并且只取实现 到目前为止,我已经识别了所有名为< code>apply的带注释的方法,并提取了它们作为参数的类名。所以我只剩下: 问题是:如果有的话,我如何才能从中获得参数的类层次结构表示,以便检查它是否实现了。无法使用<code>类加载器。loadClas