📅  最后修改于: 2023-12-03 15:25:23.182000             🧑  作者: Mango
在使用枚举类型的 switch
语句时,如果枚举类型新增了常量,但是没有在 switch
语句的 case
子句中添加相应的处理,就会出现该警告。警告消息如下:
Missing case clause for the missing enum constant: 'xxxxx'
例如,定义了一个枚举类型 Color
,含有三个常量,用于表示颜色:
enum Color {
red,
blue,
green,
}
在使用 switch
语句对枚举类型进行处理时,如果没有加入新的枚举常量处理的 case
子句,就会出现警告:
void printColor(Color color) {
switch (color) {
case Color.red:
print('red');
break;
case Color.blue:
print('blue');
break;
case Color.green:
print('green');
break;
}
}
void main() {
Color color = Color.blue;
printColor(color);
color = Color.orange;
printColor(color);
}
输出警告消息如下:
Warning: This expression has a type of 'Color' which is implicitly non-nullable, but its value can be 'null'.
Missing case clause for the missing enum constant: 'Color.orange'.
Try adding a new case clause for the missing constant, or adding a default clause instead.dart(missing_enum_constant_in_switch)
解决该问题的方法有两种:
case
子句当枚举类型新增了常量时,可以在 switch
语句中添加相应的处理 case
子句。例如,当新增了一个 Color.orange
常量,可以在 switch
语句中添加如下子句:
void printColor(Color color) {
switch (color) {
case Color.red:
print('red');
break;
case Color.blue:
print('blue');
break;
case Color.green:
print('green');
break;
case Color.orange: // 新增的枚举常量
print('orange');
break;
}
}
void main() {
Color color = Color.blue;
printColor(color);
color = Color.orange;
printColor(color); // 输出 'orange'
}
输出结果为:
blue
orange
case
子句如果不想添加新的 case
子句来处理新增的常量,可以在 switch
语句末尾添加默认的 case
子句,用来处理枚举类型中未包含的常量,如下所示:
void printColor(Color color) {
switch (color) {
case Color.red:
print('red');
break;
case Color.blue:
print('blue');
break;
case Color.green:
print('green');
break;
default:
print('unknown'); // 处理未知的枚举常量
}
}
void main() {
Color color = Color.blue;
printColor(color);
color = Color.orange;
printColor(color); // 输出 'unknown'
}
输出结果为:
blue
unknown
在使用枚举类型的 switch
语句时,如果枚举类型新增了常量,建议在 switch
语句中添加相应的处理 case
子句,或添加默认的 case
子句用于处理未知的枚举常量。这样不仅可以避免警告的出现,也可以确保程序的正确性。