7

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

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

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

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

谢谢你的帮助!

4

2 回答 2

8

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

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

于 2008-12-18T18:47:05.683 回答
0

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

于 2008-12-18T17:49:48.467 回答