ABC:從字母表入手學習Java註釋

banq發表於2024-12-25


如果你已經掌握英語字母表,而且你已經掌握了 Java 基礎知識,讓我們帶你踏上 Java 註釋之旅,一次一個字母。

A代表@Autowired
這聽起來很方便,你只需新增一個註釋,類中的所有欄位就會神奇地初始化。但是這些值從哪裡來的呢?

B代表@Bean
啊哈,所以這些值就是從這裡來的。也許我們只需要找到一個用 註釋的方法@Bean。你可以去嘗試@Bean構造,但前提是你必須閱讀並理解這裡寫的所有內容。

C代表@Component(Scan)
也許吧,但如果沒有這樣的方法,那麼值就來自其他地方。是的,您還可以透過在程式碼庫中的某個地方新增帶有註釋的類來更改程式的整個行為。當它自動完成時,這太過分了,我不是唯一一個這樣想的人。

D代表@Deprecated
現在,這裡有一個不會讓 Sergey 大叔傷心的註釋!它不會引入任何魔法。相反,它以一致的方式傳達有關一段程式結構的資訊,允許您以程式設計方式對其進行操作,而不必影響執行時行為。

E代表@Email
現在你的朋友都不再使用電子郵件了。然而電子郵件卻無處不在。有時,你只是不想知道這些正規表示式中哪一個用於電子郵件驗證。直到你知道為止。至少,我還沒有見過@HTML。

F代表@FunctionalInterface
你的 Sergey 叔叔對此猶豫不決。是的,這只是後設資料,但這些後設資料有用嗎?我猜如果你正在構建一個庫,額外的編譯時檢查不會有什麼壞處。

G代表@Generated
理想情況下,它應該遵循與其他所有內容相同的樣式指南、格式規則和檢查。但是,我們無法為每個人的程式碼庫重寫生成器,所以至少我們知道如何停用這些類的檢查,如果我們可以透過構造來保證它們的安全性。

H代表@HeaderParam
我們成年人通常很懶,但說實話,req.getHeader寫程式碼不會花那麼多時間。另外,您的 IDE 將透過自動完成功能確保良好的 API 可發現性。

I代表@Inject
好吧,也許我們在這裡繞了一大圈,但我們甚至還沒有讀完字母表的一半。

J代表@JsonProperty
將資料模式與類欄位一起描述確實很方便。但請考慮以這種方式宣告的模式可能會成為您的事實來源,在這種情況下它將以 Java 為中心。但如果模式是在其他地方宣告的,那麼註釋的類很可能會自動生成,此時,為什麼不生成效能更高的程式碼呢?

K代表@KeyFor
靜態分析可以提供幫助,註釋是一種不錯的工具,可幫助您儘早糾正錯誤。然而,在某些時候,維護這些檢查的成本可能會超過其優點。如果您必須依靠註釋對映的鍵,請考慮是否有辦法用更嚴格的型別重寫程式碼。

L代表@Log4j
有人已經明確表示應該將其視為一種單獨的語言,我同意他們的觀點。

M代表@Mock
你不想每次在不改變程式碼邏輯的情況下更改程式碼結構時都更新測試。與其使用 mock,不如使用 fake,這樣你就可以測試狀態,而不是互動。@DoNotMock這是我最近最喜歡的註釋。

N代表@Nullable
啊,價值百萬美元的朋友:NullPointerException。新增此後設資料非常好,只要它是一致的,並且可能使用NullAway之類的工具強制執行。否則,您將無法信任它。

O代表部分是後設資料
部分是JLS@Override中提到的語言特性。如果您使用 IDE,您將永遠不需要手動輸入它。

P代表@Profile
由於宣告式 Spring 連線不夠靈活,現在我們有了宣告式if條件。至少配置不再儲存在 XML 中。

Q代表@Qualifier
可怕的是,有了這個註釋,你可以建立自己的自定義限定符註釋。我稱之為遞迴魔法。

R代表@RestController
與@Component有一點不同。我很高興看到越來越多的框架正在轉向函式式方法,這種方法雖然不那麼神奇,但是一種很好的方法。

S代表@SuppressWarnings
如果您沒有因為警告而導致構建失敗,警告很快就會變得毫無意義,這使得此註釋成為必要之惡。

T代表@Transactional
我浪費了很多時間在@Transactional私有方法的除錯上。

U代表@Untainted
汙點檢查是一個非常有趣的概念。有些語言是圍繞它構建的,比如這個專案:Jeeves 。但在 Java 中,老實說,我更喜歡 Google使用型別來實現汙點檢查的方式。

V代表@VisibleForTesting
從表面上看,這個註釋聽起來很有用:將機器可讀的後設資料附加到程式結構的一部分。但實際上,它可以透過使次優選擇合法化來鼓勵捷徑。如果可以的話,請避免將測試與類的實現細節從外部耦合。

W代表@WebAppConfiguration
我想我曾經用過這個。我不認為我當時完全理解它的作用。我希望我只是編寫了普通的舊程式碼。

X代表@XmlElement
我們已經討論了在程式碼中宣告模式的問題。不過,現在,如果您正在解析 XML,則更有可能讀取特定檔案格式,而不是與其他系統整合。

Y代表@YamlProperty
和以前一樣。不過,在決定使用此註釋之前,請務必檢視noyaml.com 。

Z代表@Z...
你總有一天會自己寫一個。

總有一天你得自己寫元註釋, 也許你會遇到一個真正有用的問題,那就是將後設資料附加到程式結構的一部分--比如用 @Beta 標記不穩定的 API,並以程式設計方式強制執行其使用規則。 但不要為了省幾行程式碼而建立一個新註解。 先做一次,瞭解神奇框架的工作原理,然後就不要再做了。 神奇的捷徑幾乎從來不值得一試。

 

相關文章