如何最优处理日期时间解析异常?解析失败时设值为null
问题描述
以下是我的代码片段:
... try { race.setDate(new Date(dateFormat.parse(entry[5]).getTime())); race.setTime(Time.valueOf(entry[6])); race.setFp1Date(new Date(dateFormat.parse(entry[8]).getTime())); race.setFp1Time(Time.valueOf(entry[9])); race.setFp2Date(new Date(dateFormat.parse(entry[10]).getTime())); race.setFp2Time(Time.valueOf(entry[11])); race.setFp3Date(new Date(dateFormat.parse(entry[12]).getTime())); race.setFp3Time(Time.valueOf(entry[13])); race.setQualiDate(new Date(dateFormat.parse(entry[14]).getTime())); race.setQualiTime(Time.valueOf(entry[15])); race.setSprintDate(new Date(dateFormat.parse(entry[16]).getTime())); race.setSprintTime(Time.valueOf(entry[17])); } catch (ParseException e) { throw new RuntimeException(e); } ...
当前try块中的每一行都可能抛出异常。根据需求,若entry[i]无法解析,对应的setter应将值设为null而非抛出异常。逐行添加try-catch块并非最优方案,且不想逐行检查entry[i]的值,请问该如何最优处理此场景?
解决方案
核心思路是将重复的解析逻辑封装为工具方法,让方法内部处理异常,解析失败时返回null,既避免冗余代码,又满足需求。
1. 封装日期解析方法
针对日期解析的逻辑,编写一个工具方法:
private Date parseDate(String dateStr, DateFormat dateFormat) { if (dateStr == null) { return null; } try { return new Date(dateFormat.parse(dateStr).getTime()); } catch (ParseException e) { return null; } }
2. 封装时间解析方法
针对Time类型的解析,编写对应的工具方法:
private Time parseTime(String timeStr) { if (timeStr == null) { return null; } try { return Time.valueOf(timeStr); } catch (IllegalArgumentException e) { return null; } }
3. 重构原有代码
用工具方法替换原有的逐行解析逻辑,代码会变得简洁清晰:
race.setDate(parseDate(entry[5], dateFormat)); race.setTime(parseTime(entry[6])); race.setFp1Date(parseDate(entry[8], dateFormat)); race.setFp1Time(parseTime(entry[9])); race.setFp2Date(parseDate(entry[10], dateFormat)); race.setFp2Time(parseTime(entry[11])); race.setFp3Date(parseDate(entry[12], dateFormat)); race.setFp3Time(parseTime(entry[13])); race.setQualiDate(parseDate(entry[14], dateFormat)); race.setQualiTime(parseTime(entry[15])); race.setSprintDate(parseDate(entry[16], dateFormat)); race.setSprintTime(parseTime(entry[17]));
方案优势
- 消除了大量重复的try-catch代码,提升代码可读性与可维护性
- 统一处理解析失败场景,所有解析出错的字段自动设为
null - 无需手动检查
entry[i]的空值情况,工具方法已提前处理
内容的提问来源于stack exchange,提问作者Rashmi Ranjan Bisoi
相关产品推荐
相关产品推荐

