2013-05-01 39 views
0

所以我有一個問題,我不確定是否可以很好解決。重構註釋但保留舊的註釋名稱以便向後兼容

我有了一個方法的註釋

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

對於庫的下一個版本的庫,我想複製這個註解並將其重命名,但@Deprecated爲向後繞離開這個老註解兼容性,所以在人們進行切換時不會有很大的突破。

問題是因爲我不能繼承註解,所以我必須編寫所有的代碼兩次來處理兩個不同的註釋。我想避免這個問題,並且時間很長。

所以問題是有什麼辦法來重新命名新版本的註釋,但保持向後兼容性,而不必編寫兩個版本的代碼?

回答

1

我想到的一種方法是使用Hibernate驗證器項目中的this onethis one註釋代理(聲明:我是後者的提交者)。

您可以基於新註釋的屬性值爲舊的,現在不推薦使用的註釋創建代理。這樣你的代碼處理註釋可以保持不變。

或者您重構您的代碼以處理新的註釋類型,並在發現舊註釋類型時爲新註釋類型創建代理,您可以稍後逐步淘汰。

+0

如果我想使用它,我需要包含哪些庫?它是獨立的還是我需要休眠? – greedybuddha 2013-05-01 21:27:30

+0

如果我連接的第一個庫(名爲Miyamoto),Maven座標是'com.googlecode.miyamoto:miyamoto:1.0.0'(注意:我還沒有嘗試過這個庫)。要使用Validator中的代理類,我可能只需複製這一個類(也可能是一個或兩個相關的類)。 – Gunnar 2013-05-02 07:33:05