所以我有一个问题,我不确定是否可以很好地解决。
我有一个带有方法注释的库
@Retention(RetentionPolicy.RUNTIME)
public @interface CallbackHandler {...}
对于该库的下一个版本,我想复制此注释并重命名它,但将这个旧注释与 @Deprecated 一起保留以实现向后兼容性,因此在人们进行切换时不会出现硬中断。
问题是由于我无法对注释进行子类化,因此我必须将所有代码编写两次才能处理两个不同的注释。我想避免这种情况,因为它会带来问题并且会浪费大量时间。
那么问题是有什么方法可以重命名新版本的注释,同时保持向后兼容性,同时不必编写两个版本的代码?
最佳答案
我想到的一种方法是使用注释代理,例如 this one或或this one来自 Hibernate Validator 项目(免责声明:我是后者的提交者)。
您可以根据新注释中的属性值,为现已弃用的旧注释创建代理。这样您处理注释的代码就可以保持不变。
或者,您可以重构代码来处理新的注释类型,并在发现旧注释类型时为新的注释类型创建一个代理,稍后可以通过这种方式逐步淘汰。
关于java - 重构注释但保留旧注释名称以实现向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311155/