使用注释创建API的多个版本

时间:2014-04-01 15:31:57

标签: java compiler-construction annotations preprocessor

是否可以使用注释创建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之前丢失参数名称)?

请注意,我需要支持接口和类,包括抽象类和内部类。方法和常量也需要进行版本控制。

1 个答案:

答案 0 :(得分:0)

好的,我认为您确实可以使用注释来标记应该公开API的版本范围。例如,如果在1.1版中引入了方法foo()。在1.5版中已弃用,您可以将其标记为:

class MyApiImpl {     @Since( “1.2”)     @DeprecateAt( “1.4”)     @Until( “1.5”)     FOO(); }

然后,您可以根据客户端版本自动生成接口接口MyApi

  1. 对于客户端先前版本1.2,此方法不会包含在界面中。
  2. 适用于版本1.2和1.4之间的客户端
  3. 对于客户端版本1.4,它将被包含但标记为@Deprecated
  4. 1.5
  5. 后客户不会包含它