java - 重构注释但保留旧注释名称以实现向后兼容性

标签 java annotations refactoring

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

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

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

对于该库的下一个版本,我想复制此注释并重命名它,但将这个旧注释与 @Deprecated 一起保留以实现向后兼容性,因此在人们进行切换时不会出现硬中断。

问题是由于我无法对注释进行子类化,因此我必须将所有代码编写两次才能处理两个不同的注释。我想避免这种情况,因为它会带来问题并且会浪费大量时间。

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

最佳答案

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

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

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

关于java - 重构注释但保留旧注释名称以实现向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311155/

相关文章:

java - 如何将 IETF BCP 47 语言代码转换为显示字符串?

java - 单击 Highcharts 数据导出菜单时应用程序崩溃

java - 在 Eclipse 中调试 Maven WAR 项目?

go - 重构Golang避免相似结构之间的手动字段更新

javascript - 如何在 apostropecms 中重构客户端 js

java - 这个程序怎么是先序遍历呢?

java - 使用 XML 而不是通过注释配置 hibernate 有充分的理由吗?

Java Jersey 声明式超链接 @Ref 注解的使用

java - 基于 togglz 注释的特征验证方法

php/mysql 从 mysql 切换到 mysqli 或 pdo,可以逐步进行