0

所以我有一个问题,我不确定是否可以很好地解决。

我有一个带有方法注释的库

@Retention(RetentionPolicy.RUNTIME)
public @interface CallbackHandler {...}

对于库的下一个版本,我想复制这个注解并重命名它,但是为了向后兼容,将这个旧注解留给@Deprecated,所以在人们进行切换时不会出现硬中断。

问题是因为我不能子类化注释,我必须编写所有代码两次来处理两个不同的注释。我想避免这种情况,因为这是有问题的,而且时间很长。

所以问题是有什么方法可以重命名新版本的注释但保持向后兼容性而不必编写两个版本的代码?

4

1 回答 1

1

我想到的一种方法是使用注释代理,例如来自 Hibernate Validator 项目的thisthis(免责声明:我是后者的提交者)。

您可以根据新注释的属性值为旧的、现已弃用的注释创建代理。这样,您处理注释的代码就可以保持不变。

或者你重构你的代码来处理新的注解类型,并在发现旧的注解类型时为新的注解类型创建一个代理,你可以在以后逐步淘汰这种方式。

于 2013-05-01T20:54:49.367 回答