2016-11-30 40 views
1

這個問題不是關於如何發生堆污染。這個問題不是關於註釋@SafeVarargs有什麼影響。據我所知,它用於在本地和呼叫站點抑制警告。我讀了documentation。我的問題是:爲什麼將這個註釋添加到Java語言中?@SafeVarargs註釋的存在/缺失是否真的是有用的區別?

考慮以下幾點:

  1. 缺少註釋的是不是一個有用的區別。永遠不會有這樣一種情況,您可能打算以不安全的方式使用VarArgs,即「UnsafeVarargs」。

    這不同於其他註釋,如@Override,其中沒有註釋是一個有用的區別:「嘿,我不打算在我的超類中重寫任何方法,如果有人向我的方法添加了一個具有相同簽名的方法,超「。

  2. 無論是程序員都知道如何安全地使用可變參數或者他們不這樣做。如果他們添加註釋,它不會改變它。那麼這不僅僅是爲呼叫者提供虛假的安全感嗎?

    這讓我想起了有缺陷的概念,即牽着你的車門把手了,而關上了門會阻止你從內鎖定你的鑰匙。

  3. 從2點繼續,那豈不是更好地默認全局關閉警告,然後在全球範圍重新啓用它做了廣泛的審查是什麼時候?

也許我錯過了一些東西。也許註釋在從Java舊版本遷移時扮演一個有用的角色?我歡迎你的回答。謝謝。

回答

2

從2點繼續,那豈不是更好地默認全局關閉警告,然後在全球範圍重新啓用它做了廣泛的審查是什麼時候?

這聽起來像是真的不好事情的現實。

在現實中,你爭取零容忍政策。代碼中零浪費,零警告,零錯誤,零單元測試失敗。而且你一直在檢查你的「計數」。你給你的班級添加5行代碼;那個班會變黃! (日食告訴你關於警告在那裏)...你進去和修復他們 - 立即。而不是在某個假設的未來時點,即有人在全球啓用警告。

換句話說:你永遠都不會想到在全球範圍內禁用警告。

所以,反過來說:有些情況下編譯器只能檢測到:「有可能是一個問題」 - 然後編譯器會提出更好的警告。但對於那些程序員可以合理審時度勢的情況下,這樣的註釋是一個簡單,直接的意思是(工作真的局部範圍!),以抑制編譯器警告。

但是你在你的假設當然是正確的,一個程序員誰不明白的可變參數可能會無意中使用註解的方式不正確,太。一個合理的解決策略可能是:「讓代碼評論關注使用這個註釋的代碼」。而不是全局禁用警告。

相關問題