我有一个程序,基本上是这样的:
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;
}
}
如你,一个人,可以看到,案例2时以前有一个状态1和它初始化数组后切换到状态2只没发生过。但是Eclipse和Java编译器不看到这一点,因为它看起来像很复杂的逻辑给他们。因此,Eclipse的抱怨:
局部变量stuffNThings可能尚未初始化“。
如果我变“ boolean[] stuffNThings;
”到“ boolean[] stuffNThings=null;
”,切换到这个错误信息:
潜在的空指针访问:变量stuffNThings可能会在这个位置空。
我还不能在顶部初始化它,这是因为数组的大小在状态1中的最后循环之后才确定的。
Java会把该阵列可以为空,但我知道这不可能。是否有某种方式来告诉Java的这种?还是我肯定被迫把无用的null
周围检查?并称,使代码难以理解,因为它看起来像可能存在的价值实际上并没有得到设定的情况下true
。
只是想不管Eclipse的抱怨来执行代码后,我发现它确实运行没有问题。因此很明显,这只是一个警告设置为“错误”的水平,尽管不是关键的。
有一个“配置问题的严重性”按钮,所以我设置的“潜在的空指针访问”到“警告”的严重程度(和相应调整其他一些级别)。现在Eclipse的只是将其标记为警告,而不会抱怨执行代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句