【发布时间】:2019-01-09 12:17:47
【问题描述】:
我有以下示例情况:
public void shouldReturnStringForEnum() {
MessageType myType = getType();
System.out.println(getMessageForType(myType));
}
String getMessageForType(MessageType myType) {
switch(myType) {
case error:
return "Error type";
case warning:
return "Warning type";
case info:
return "Info type";
}
} // <= error: missing return statement
MessageType getType() {
Random random = new Random();
return MessageType.values()[random.nextInt(3)];
}
enum MessageType {error, warning, info }
除了从switch 语句的主体之外,我无法弄清楚从方法getMessageForType 返回的可能性是什么。
我在想:
- 从 I/O 数据反序列化 - 但随后
java.lang.IllegalArgumentException: No enum constant发生在调用getMessageForType之前很久 - 可能的 null 方法参数 - 但随后它将在
switch(myType)评估中失败,java.lang.NullPointerException
在这种情况下强制使用默认的 return 语句是很不舒服的,因为我不知道在这里返回什么。在这种情况下抛出异常在这里也没有任何意义。这种行为背后的设计决策是什么?
请帮忙,我在这里缺少什么?
【问题讨论】:
-
其他一些想法:A)当您切换到从中派生字符串时,为什么要使用枚举?为什么不将该字符串 build 到您的枚举中,这样您就可以转到
myType.getWhateverText()?! B) 一个用 @Test 注释的测试,它不做 assert 或其他类型的真正验证......但只是一个 print ...不是一个测试;-) -
嗨,这里的返回类型无关紧要,@Test 只是处理这种特殊情况的一种形式。我会删除它,以免混淆
标签: java enums switch-statement return