2013-05-01 36 views
0

所以我有一个问题,我不确定是否可以很好解决。重构注释但保留旧的注释名称以便向后兼容

我有了一个方法的注释

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

对于库的下一个版本的库,我想复制这个注解并将其重命名,但@Deprecated为向后绕离开这个老注解兼容性,所以在人们进行切换时不会有很大的突破。

问题是因为我不能继承注解,所以我必须编写所有的代码两次来处理两个不同的注释。我想避免这个问题,并且时间很长。

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

回答

1

我想到的一种方法是使用Hibernate验证器项目中的this onethis one注释代理(声明:我是后者的提交者)。

您可以基于新注释的属性值为旧的,现在不推荐使用的注释创建代理。这样你的代码处理注释可以保持不变。

或者您重构您的代码以处理新的注释类型,并在发现旧注释类型时为新注释类型创建代理,您可以稍后逐步淘汰。

+0

如果我想使用它,我需要包含哪些库?它是独立的还是我需要休眠? – greedybuddha 2013-05-01 21:27:30

+0

如果我连接的第一个库(名为Miyamoto),Maven坐标是'com.googlecode.miyamoto:miyamoto:1.0.0'(注意:我还没有尝试过这个库)。要使用Validator中的代理类,我可能只需复制这一个类(也可能是一个或两个相关的类)。 – Gunnar 2013-05-02 07:33:05