Integer i = ...
switch (i) {
case null:
doSomething0();
break;
}
在上面的代码中,我不能在switch case语句中使用null。我该怎么做呢?我不能用默认,因为我想做别的。
Integer i = ...
switch (i) {
case null:
doSomething0();
break;
}
在上面的代码中,我不能在switch case语句中使用null。我该怎么做呢?我不能用默认,因为我想做别的。
当前回答
我今天才知道,你不必放另一层缩进/花括号,只是因为if检查为空。你可以做以下任何一种:
if (i == null) {
// ...
} else switch (i) {
case 1:
// ...
break;
default:
// ...
}
or
if (i != null) switch (i) {
case 1:
// ...
break;
default:
// ...
} else {
// ...
}
其他回答
你不能。你可以在switch中使用基本类型(int, char, short, byte)和String(仅在java 7中使用字符串)。原语不能为空。 开关前检查i是否处于单独状态。
Java文档明确指出:
禁止使用null作为开关标签可以防止编写永远不能执行的代码。如果开关表达式是引用类型,例如盒装基元类型或enum,如果表达式在运行时求值为空,则会发生运行时错误。
在switch语句执行之前,必须验证是否为空。
if (i == null)
参见Switch语句
case null: // will never be executed, therefore disallowed.
你也可以使用String.valueOf((对象)nullableString) 就像
switch (String.valueOf((Object) nullableString)) {
case "someCase"
//...
break;
...
case "null": // or default:
//...
break;
}
参见有趣的SO Q/A:为什么String.valueOf(null)抛出NullPointerException
基于@tetsuo的答案,java 8:
Integer i = ...
switch (Optional.ofNullable(i).orElse(DEFAULT_VALUE)) {
case DEFAULT_VALUE:
doDefault();
break;
}
switch (String.valueOf(value)){
case "null":
default:
}