2014-04-01 62 views
1

是否可以使用註釋來創建多個版本的API?使用註釋創建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

包括爲客戶我認爲這是優雅 – Leo

+0

您正在討論支持多個Java版本,而不是您的API的不同版本,是否正確? –

+0

您想如何使用這些註釋?我的意思是你想阻止老客戶調用更新的API或阻止老客戶看到它嗎? – AlexR

回答

0

好吧,我認爲你可以真正使用註釋來標記應該公開API的版本範圍。例如,如果在版本1.1中引入了方法foo()。和在1.5版本棄用可以將其標記爲:

類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