是否可以使用注释创建API的多个版本?
我有一个需要实现的目标API,但它已经及时增长,我想支持多个级别 - 如果可能的话,在同一个分支中。我已经考虑过拆分API并将其代理到实现库,但仍然需要大量代码才能保持同步。
所以你要创建如下代码:
@Since("1.2") <- only created when 1.2 or higher
public interface InNewerAPI {
@Since("1.3") <- only compiled when 1.3 or higher
public void methodInEvenNewerAPI();
}
当然我也可以使用预处理器,但我想避免使用Java代码的预处理器。
这种方法有什么缺点(例如在1.8之前丢失参数名称)?
请注意,我需要支持接口和类,包括抽象类和内部类。方法和常量也需要进行版本控制。
答案 0 :(得分:0)
好的,我认为您确实可以使用注释来标记应该公开API的版本范围。例如,如果在1.1版中引入了方法foo()
。在1.5版中已弃用,您可以将其标记为:
class MyApiImpl { @Since( “1.2”) @DeprecateAt( “1.4”) @Until( “1.5”) FOO(); }
然后,您可以根据客户端版本自动生成接口接口MyApi
:
@Deprecated