2011-11-23 45 views
12

我明白自動取消裝箱應該小心,因爲正在取消裝箱的參考文件可以爲空。爲什麼自動裝箱標記爲警告?我在這裏錯過了一些陷阱嗎?爲什麼將自動裝箱標記爲警告?

+0

我的開箱即用的eclipse不會顯示自動裝箱和取消裝箱的警告。你使用什麼類型/版本的日食? – LanguagesNamedAfterCofee

+2

您可以在項目屬性 - > Java編譯器 - >錯誤/警告 - >潛在編程問題中啓用它(和其他不同的警告)。 – Artium

+0

請參閱:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 163065這是將裝箱與拆箱分離的功能請求。 – Kyle

回答

6

如果您不期望性能問題(就微優化而言),您可以安全地禁用此警告。這只是一個跡象,如果你不知道自動拳擊發生在這裏。在有I/O開銷(由於數據庫事務或磁盤訪問)的業務邏輯代碼中,自動裝箱從不是問題。

+1

在日食中,只有拳擊警告不能關閉解除警告。是否有人建議關閉(關閉它們)? 我正在做一個大學項目,導師想要在最大警告級別發出零警告(可以選擇性地忽略警告) – Artium

+0

@Artium在你的情況下,你可以使用顯式轉換,以便操作可以從int int = Integer.intValue ()'和'Integer I = new Integer(i)'。之後,編譯器不會抱怨。 – stacker

+1

存在與分離這些警告相關的錯誤:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 163065 – Kyle

2

自動裝箱可以促進相關的收藏「刪除」方法的錯誤,儘管這可能是一個相當不起眼的錯誤。

當我使用隨機數生成器來選擇要從ArrayList中刪除的項的索引時,我遇到了這個錯誤。生成器返回了一個很長的基元,我不小心嘗試用它作爲List.remove(int index)的參數。編譯器將long轉換爲Long,並在List.remove(Object o)中使用它,從而給出完全不同的行爲。幸運的是,一個斷言聲明迅速發現了這個錯誤。

根據對「刪除」這個問題的討論,其他人遇到類似的問題,他們的int出乎意料地像一個整數,但我不明白這是怎麼發生的。 https://stackoverflow.com/questions/104799/why-arent-java-collections-remove-methods-generic (請參閱ScArcher2的評論)

+0

這是重載函數的預期行爲,而不是bug。 –