[英]My own deprecated annotation
可以使用不推薦使用的代碼樣式創建像@deprecated 這樣的注釋嗎?
我想創建一個注釋來指示某些消息已從通信協議中刪除,因此我不想使用已棄用的注釋,因為我想要 1) 為我的注釋提供一個更好、更具暗示性的名稱,例如“消息2) 為我的注釋提供參數,例如 (protocol = 5) - 從協議 5 開始刪除。
但是,我想保留此刪除線代碼,讓其他人知道僅通過查看代碼即可刪除此消息。
@Deprecated 注釋是為開發環境設計的(通常但不僅限於)。 它自己什么都不做。 但是對於 IDE,它是某種標記,當它“看到”該注釋時 - 它會執行一些邏輯(例如“刪除線”代碼)。 我發帖的目的是要告訴大家,開發和使用注解是不夠的:必須有環境支持。
您可以做兩件事:
在方法中添加@Deprecated
注解,在方法的javadoc中添加@deprecated
標簽
你應該兩者都做!
引用有關此主題的 java 文檔:
從 J2SE 5.0 開始,您可以使用@Deprecated
批注棄用類、方法或字段。 此外,您可以使用 @deprecated Javadoc 標記告訴開發人員要使用什么。
使用注釋會導致 Java 編譯器在使用不推薦使用的類、方法或字段時生成警告。 如果不推薦使用的編譯單元使用不推薦使用的類、方法或字段,則編譯器會取消不推薦使用警告。 這使您能夠在不生成警告的情況下構建舊 API。
強烈建議您使用帶有解釋如何使用新 API 的適當注釋的 Javadoc @deprecated
標記。 這確保了開發人員將擁有從舊 API 到新 API 的可行遷移路徑
在查看Deprecated annotation的源代碼時,您會發現沒有任何特定內容使其帶有刪除線。 IDE 的一項功能是用刪除線標記@Deprecated 代碼。
這是:
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Deprecated {
}
馬尤爾·古普塔
我創建了一個注釋 MessageRemoved:
public @interface MessageRemoved {
Protocol protocol();
}
和一個枚舉:
public enum Protocol {
P01, P02, P03, P04, P05
}
使用注解:
@MessageRemoved(protocol = Protocol.P05)
public class OldMessage extends Message{
}
這有助於對已刪除消息的可追溯性。 僅使用注釋@Deprecated
這是不可能的。
+1 oleg.lukyrych 的回答但你仍然可以做一些事情。
創建您的注釋(使用您想要的所有參數),然后將靜態代碼分析添加到您的構建過程中。 即帶有自定義規則的 PMD。 PMD 是眾所周知的,並且很好地集成在各種 IDE 和持續構建環境中,如 hudson/jenkins。 該分析將為您生成一份關於(錯誤)使用已棄用消息的不錯報告。
它不像將它放入您的編輯器中那么好,但它可以完成工作。
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.