Java注解属性限制

标签 java annotations

我认为这是不可能的,但我想把这个问题提出来,以防万一我遗漏了一些东西。 我有一个注释:

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Auditable {
  enum When{COMPLETE,ENTERING};
  /**
   * The list of attributes in this class to be audited
   * This is used at target level 'Type' only 
   * 
   * @return
   */
  String[] attributes() default {};

  /**
   * enum to dictate when to audit this message
   * This is used at target level 'method' only
   * 
   * @return
   */
  When when() default When.ENTERING;
}

我想要的是一种添加注释以将属性的目标限制为类型或方法的方法。

例如,上面的属性“when”仅限于方法:

  /**
   * enum to dictate when to audit this message
   * This is used at target level 'method' only
   * 
   * @return
   */
  @Target({ElementType.METHOD})
  When when() default When.ENTERING;

我再次不相信这是可能的,但如果有的话那就太好了。

最佳答案

不,没有办法限制注释的属性只能在编译时根据注释的目标使用。在处理注释时,您始终可以在运行时抛出异常。

否则,您将必须定义和使用不同的注释类型。

关于Java注解属性限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29436111/

相关文章:

java - 在方法调用之前修改参数

Angular2 - 是否可以使用选择器名称获取组件类名称

java - 突然maven无法编译

java - 源文件夹不在 java 构建类路径上,使用 JUnit

java - 如何拆分/解析 Java 字符串以清晰地显示项目符号点?

java - 如何提取两个分隔符之间的字符串

java - Android框架中javadoc中的@remove是什么意思

java - 使用类类型作为 Java DSL 有效负载类型路由器中的键

java - WebServlet - 带有两个字符的 urlPatterns

java - bazel:sema注释和子目录