簡體   English   中英

我自己棄用的注釋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM