私は基本的にはこのようになりますプログラムを持っています:
boolean[] stuffNThings;
int state=1;
for(String string:list){
switch(state){
case 1:
if(/*condition*/){
// foo
break;
}else{
stuffNThings=new boolean[/*size*/];
state=2;
}
// intentional fallthrough
case 2:
// bar
stuffNThings[0]=true;
}
}
もし、人間が、見ることができるようにそこに以前の状態1であり、それは、配列を初期化した後の状態2に切り替えたときに、ケース2は今まで行われます。それは彼らにかなり複雑なロジックのように見えるので、しかし、EclipseとJavaコンパイラは、この表示されません。Eclipseは不平を言うので:
ローカル変数のstuffNThingsは初期化されていないかもしれません。」
そして私の変更「場合boolean[] stuffNThings;
」を「boolean[] stuffNThings=null;
」、それがこのエラーメッセージに切り替わり:
潜在的なNULLポインタアクセス:変数stuffNThingsは、この場所でのnullの場合もあります。
アレイのサイズのみ状態1の最後のループ後に決定されるので、私はまた、上部でそれを初期化することができません。
Javaは、配列がnullになることができると思うが、私はそれができないことを知っています。これをJavaのを伝えるためにいくつかの方法はありますか?それとも私は間違いなく役に立た置くことを余儀なくしていますnull
その周りのチェックを!値が実際に設定されない場合があるように見えるので、それを追加すると、コードが難しく理解することができますtrue
。
ちょうどかかわらず、Eclipseの不満のコードを実行しようとした後、私はそれは確かに問題なく実行しないことに気づきました。だから、明らかにそれは重要ではないにも関わらず、「エラー」レベルにちょうど警告されて設定されました。
私は「警告」と「潜在的なNULLポインタへのアクセス」の重大度を設定し(それに応じて他のいくつかのレベルを調整する)ように、「設定の問題の重大度」ボタンがありました。今、警告としてだけマークしてEclipseと文句なしのコードを実行します。