我是否可以根据Annotated字段的类型生成编译时错误

我写了一个java注释,看起来像这样:

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

在简要回顾之后,我无法看到是否有办法进一步限制此注释的使用,以便只能注释特定类型的字段。 此注释是我们的域自定义的,只能在我们的基域对象类的实例上使用。

有谁知道如何在编译时强制执行此操作?

谢谢你的帮助!

您可以在注释处理器中发出错误(如果您需要Java 5支持,则必须使用私有API )。 您可以使用从传递给init的ProcessorEnvironment获得的Messager 。

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

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