我有一个基本上看起来像这样的程序:
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.
小唯快跑啊
繁星coding
料青山看我应如是
梦里花落0921
相关分类