Scala Month函数运行报No enum constant枚举错误如何修复
问题修复方案
错误根因
Month.valueOf()方法要求入参必须是java.time.Month枚举中预设的常量名,合法值为全大写的JANUARY到DECEMBER,传入不存在的名称就会抛出IllegalArgumentException- 你当前运行环境的
month系统属性值为UNDEFINED,不属于枚举合法值,因此触发报错
修复方案
代码层面增加非法值兼容逻辑即可,优化点包括:增加入参预处理(去空格、转大写)、异常捕获、非法值降级,修复后的完整代码如下:
import java.time.Month import java.util.Calendar object Test { val FINAL_MONTH_NBR = 12 def main(args: Array[String]) { month() } def month(): Int = { val month = System.getProperty("month") if(month == null) { Calendar.getInstance().get(Calendar.MONTH) } else { try { // 先做去空格、转大写处理,提升合法值的匹配兼容性 val monthValue = Month.valueOf(month.trim.toUpperCase) if (monthValue == Month.JANUARY) { FINAL_MONTH_NBR } else { monthValue.getValue - 1 } } catch { // 非法值场景走降级逻辑,和属性为null的逻辑保持一致,也可按业务需求返回指定默认值 case _: IllegalArgumentException => Calendar.getInstance().get(Calendar.MONTH) } } } }
如果业务要求必须传入合法的月份枚举值,也可以在校验失败时抛出明确的业务提示错误,不需要走降级逻辑,可根据实际需求调整。
内容的提问来源于stack exchange,提问作者palamuGuy
相关产品推荐
相关产品推荐

