引发异常与使用 switch 语句返回空值

2022-09-01 22:19:52

因此,我有一个函数,该函数格式化日期以强制为给定的枚举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 返回空值

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 语句中处理


答案 1

引发异常,因为这是一个例外情况。

并把它扔到外面,它会更具可读性。否则,它听起来像“默认情况是例外”。switch


答案 2

我认为这是最好的做法。throw new IllegalArgumentException("Something strange happend")

当您使用返回值时,使用只会在某个地方导致,但它的信息量将低于引发描述问题的特定异常!nullNullPointerException

而且您知道:清晰的错误=更好的开发。


推荐