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

时间:2008-12-18 17:45:12

标签: java annotations

我编写了一个如下所示的java注释:

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

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

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

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