我有一个具有以下模式的 Java 代码:
enum Foo
{
ORANGE, APPLE, BANANA
}
Foo bar()
{
switch(calcValue())
{
case "orange": return ORANGE;
case "apple": return APPLE;
case "banana": return BANANA;
}
}
方法的设计calcValue
确保它只返回switch 语句检查的三个字符串。如果它不能返回三个字符串中的任何一个,它就会抛出异常。这意味着缺少的default
关键字可能是不必要的,并且永远不会触发默认开关行为,因此default
被省略。然而,Java 自然地(并且通常如此)抱怨bar
必须(总是)返回一个值。我正在考虑将异常作为默认值抛出,但如前所述,calcValue
已经抛出异常。我主要是在一个简单高效(涉及最少运行时检查和代码)的设计之后解决这个小问题——我不想抛出两个异常,并且calcValue
不在我的控制之下,所以我无能为力。
我希望我在这里已经很好地解释了自己,如果没有,我会尽力澄清。本质上,这是关于设计具有已知开关默认值不适用的值的方法。这也可能适用于if-then-else-if-then-else-...-then-else
语句模式。