所以我有函数格式化日期以强制给定枚举DateType {CURRENT,START,END} 使用switch语句
的情况下处理返回值的最佳方法是什么public static String format(Date date, DateType datetype) {
..validation checks
switch(datetype){
case CURRENT:{
return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss");
}
...
default:throw new ("Something strange happend");
}
}
或者在最后抛出刺激
public static String format(Date date, DateType datetype) {
..validation checks
switch(datetype){
case CURRENT:{
return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss");
}
...
}
//It will never reach here, just to make compiler happy
throw new IllegalArgumentException("Something strange happend");
}
OR返回null
public static String format(Date date, DateType datetype) {
..validation checks
switch(datetype){
case CURRENT:{
return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss");
}
...
}
return null;
}
这里最好的做法是什么?此外,所有枚举值都将在case语句
中处理答案 0 :(得分:22)
抛出异常,因为这是一个例外情况。
将它扔到switch
之外,它会更具可读性。否则听起来像“默认情况特殊”。
答案 1 :(得分:13)
我认为throw new IllegalArgumentException("Something strange happend")
是最好的实践。
使用null
只会在您使用返回值的某个地方导致NullPointerException
,但它会比提出描述问题的特定异常信息量少! / p>
而且你知道:明确的错误=更好的发展。
答案 2 :(得分:1)
我会采用第一种方法(但在第二种方法中使用IllegalArgumentException
)。您应该包含一个默认语句,以防止有人修改(扩展)您的枚举时的情况。将异常放在default-statement中会使读者清楚地知道代码永远不会超过switch语句。否则,他们必须检查是否真的所有枚举值都在交换机中。
答案 3 :(得分:1)
异常,因为你可以比单个return int更多地服从父级。通常使用存在的异常(C ++),并返回不在(C)的值。