2011-11-23 33 views
12

私は、un-boxedされている参照がnullになる可能性があるため、自動un-boxingは注意深く行うべきであることを理解しています。オートボクシングに警告としてマークされているのはなぜですか?私はここに欠けているいくつかの落とし穴がありますか?なぜ自動ボクシングは警告としてマークされていますか?

+0

私の使い慣れたEclipseは、自動ボクシングとアンボクシングの警告を表示しません。どのようなタイプ/バージョンのEclipseを使用していますか? – LanguagesNamedAfterCofee

+2

[プロジェクトのプロパティ] - > [Javaコンパイラ] - > [エラー/警告] - >潜在的なプログラミング上の問題で、これを有効にすることができます。 – Artium

+0

参照:https://bugs.eclipse.org/bugs/show_bug.cgi?id=163065ボクシングをアンボクシングから分離する機能要求です。 – Kyle

答えて

6

パフォーマンスの問題(マイクロ最適化の観点から)が期待できない場合は、この警告を安全に無効にすることができます。オートボクシングがここで起こっていることに気付かない場合に備えての表示に過ぎません。 I/Oオーバーヘッド(DBトランザクションまたはディスクアクセスによる)があるビジネスロジックコードでは、自動ボクシングは決して問題になりません。

+1

日食では、それだけでなく、ボクシングの警告をオフにしないでボクシングの警告をオンにすることはできません。それはあなたが(両方ともオフに)オフにすることをお勧めしますsomethingsですか? 私は大学のプロジェクトを行っており、講師は最大の警告レベルで警告をゼロにすることを望んでいます(警告を選択的に無視することができます) – Artium

+0

@Artiumあなたのケースでは、明示的な変換を使用して、 'int i = 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)で使用しました。これはまったく異なる動作をもたらしました。幸いにも、assertステートメントがエラーを素早くキャッ​​チしました。

"remove"というこの問題のこの議論によれば、他の誰かが、intが予想外にIntegerのように動作するような同様の問題に遭遇しました。 https://stackoverflow.com/questions/104799/why-arent-java-collections-remove-methods-generic (ScArcher2さんのコメントを参照)

+0

これはオーバーロードされた関数の予想される動作であり、バグではありません。 –

関連する問題