考虑一下:
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 种可能性。
编译器不会进入检查枚举有多少值的级别。
您的交换机没有默认情况,这将消除错误。要么用默认值替换最后一个情况,要么简单地添加一个额外的默认块来分配任何随机值;你知道它永远不会计算,但编译器不会。