建議 消除非受檢警告。

2021-08-10 14:25:28 字數 1208 閱讀 2723

用泛型程式設計時,會遇到許多編譯器警告:非受檢強制轉化警告(unchecked cast warnings)、非受檢方法呼叫警告、非受檢普通陣列建立警告,以及非受檢轉換警告(unchecked conversion warnings)。當你越來越熟悉泛型之後,遇到的警告也會越來越少,但是不要期待從一開始用泛型編寫**就可以正確地進行編譯。

當你遇到需要進行一番思考的警告時,要堅持住!要盡可能的消除每乙個非受檢警告。如果消除了所有警告,就可以確保**是型別安全的,這是一件很好的事情。這意味著不會在執行時出現classcastexception異常,你會更加自信自己的程式可以實現預期的功能。

如果無法消除警告,同時可以證明引起警告的**是型別安全的,(只有在這種情況下)才可以用乙個@suppresswarnings("unchecked")註解來禁止這條警告。如果在禁止警告之前沒有先證實**是型別安全的,那就只是給你自己一種錯誤的安全感而已。**在編譯的時候可能沒有出現任何警告,但它在執行時仍然會丟擲classcastexception異常。但是如果忽略(而不是禁止)明知道是安全的非受限警告,那麼當新出現一條真正有問題的警告時,你也不會注意到。新出現的警告就會淹沒在所有的錯誤警告當中。

suppresswarnings註解可以用在任何粒度的級別中,從單獨的區域性變數宣告到整個類都可以。應該始終在盡可能曉得範圍中使用suppresswarnings註解。它通常是個變數宣告,或是非常簡短的方法或者構造器。永遠不要在整個類上使用suppresswarnings,這麼做可能會掩蓋了重要的警告。

如果你發現自己在長度不止一行的方法或者構造器中使用了suppresswarnings註解,可以將他移到乙個區域性變數的宣告中。雖然你必須宣告乙個新的區域性變數,不過這麼做還是值得的。

每當使用suppresswarning("unchecked")註解時,都要新增一條注釋,說明為什麼這麼做是安全的。這樣可以幫助其他人理解**,更重要的是,可以儘量減少其他人修改**後導致計算不安全的概率。如果你覺得這種注釋很難編寫,就要多加思考。最終你會發現非受檢操作是非常不安全的。

總而言之,非受檢警告很重要,不要忽略他們。每一條警告都表示可能在執行時丟擲classcastexception異常。要盡最大的努力消除這些警告。如果無法消除非受檢警告,同時可以證明引起警告的**是型別安全的。就可以在盡可能小的範圍中,用@suppresswarnings("unchecked")註解禁止該警告。要用注釋把禁止該警告的原因記錄下來。

第二十四條 消除非受檢的警告

原因 有時候由於某種原因,需要將 設定為非受監測的型別,所以需要消除警告,保證 安全性。消除警告的條件?能夠在邏輯上保證 的安全性。消除警告不要在整個類中使用,要在出現問題的 片段上使用。縮小範圍 舉例 複製 suppresswarnings unchecked public t copyarray...

xcode 消除警告

專案中引用大量的第三方 時,這些 很複雜,不要輕易去改動它,如果編譯產生很多警告,該如何消除呢?1.最直接 最一勞永逸 最安全的方式,直接找到警告的那段 改為不警告。這個方式最安全。可是它有乙個問題,就是,當我們很多檔案都有這種型別的警告的時候,我們就需要改動很多很多的原始碼了,對於不是我們寫的原始...

Xcode 消除警告

在維護公司老專案的時候,因為很早以前開發的,專案能跑起來。但是公司已經不希望在上面花費時間,或多或少都會出現不少的警告。但是對於我絕對不忍受警告的出現,就想關閉它。以下是一下警告關閉的常規方法,希望能給後繼開發者一些幫助!1.遇到之前非arc的專案 遇到非arc寫的sdk,而自己專案是arc。點選p...