【问题标题】:Can I generate a compile time error based on the type of the field being Annotated我可以根据要注释的字段的类型生成编译时错误吗
【发布时间】:2008-12-18 17:45:12
【问题描述】:

我写了一个类似这样的java注解:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)  // can I further limit this to only fields of type DomainObject?
public @interface Owns {
}

在短暂环顾四周后,我看不出是否有办法进一步限制此注释的使用,以便只能注释特定类型的字段。这个注解是为我们的领域定制的,只能在我们的基础领域对象类的实例上使用。

有人知道如何在编译时强制执行吗?

感谢您的帮助!

【问题讨论】:

    标签: java annotations


    【解决方案1】:

    您可能会在 annotation processor 中发出错误(如果您想要 Java 5 支持,则必须使用 private API)。您可以使用从传递给 init 的 ProcessorEnvironment 获得的 Messager

    效果如何可能取决于您的工具链。如果您使用javac 通过命令行或通过构建脚本进行编译应该没问题。在我的 Eclipse 版本中,我必须为项目手动启用注释处理器(通过项目设置),并且错误没有出现在任何明显的地方。 (JDT 注释插件确实具有扩展点,如果您想提供自定义支持,可以更好地与 IDE 集成。)检查常用工具是值得的,特别是如果您需要支持任意开发环境。

    【讨论】:

    • 这就是我要查找的信息。我会深入研究,看看是否值得添加这些检查。谢谢。
    【解决方案2】:

    我相信这在编译时是不可执行的——如果你想确保它不在任何不合适的字段上,你必须在运行/加载时检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 2023-03-25
      • 2010-11-03
      相关资源
      最近更新 更多