为什么Java抱怨一个未初始化的变量,即使导致它初始化的每个可能的路由都得到了处理?



考虑一下:

class BlackMage {
public void castSpell(SPELL_TYPE spellType) {
Spell spell;
if (spellType == null)
return;
switch(spellType) {
case FIRE:
spell = new Fire();
break;
case BLIZZARD:
spell = new Blizzard();
break;
case THUNDER:
spell = new Thunder();
break;
}
// use spell
}
enum SPELL_TYPE {
FIRE,
BLIZZARD,
THUNDER
}
}

除非我在switch中添加一个default块并在那里初始化拼写,否则编译器会抱怨拼写未初始化。我不明白为什么,因为我们处理了所有 3 种可能性。

编译器不会进入检查枚举有多少值的级别。

您的交换机没有默认情况,这将消除错误。要么用默认值替换最后一个情况,要么简单地添加一个额外的默认块来分配任何随机值;你知道它永远不会计算,但编译器不会。

相关内容

  • 没有找到相关文章

最新更新