原创 Hamm 2025-10-03 09:01 重庆
点击关注公众号,技术干货及时达!
long timestamp = System.currentTimeMillis();// beforeDateTimeUtil.format(timestamp, DateTimeFormatter.FULL_DATE);// afterDateTimeFormatter.FULL_DATE.format(timestamp);如上示例代码,我们可以在调用时候减少传入一个枚举形参的传入,写出来的代码会更加简洁好看。❝还有其他好处吗?好像没有了...❞当然,我们不讨论这两种写法的好处和坏处 「(评论区可以讨论)」 ,我们只聊实现。二、Java 的实现众所周知,在 「Java」 中,枚举本身也是类的特殊封装,而枚举项可以认为是 「Java」 类的静态实例常量,所以,我们很轻易的就能实现:2.1 封装枚举类@Getter@AllArgsConstructorpublicenum DateTimeFormatter { /** * 年月日 */ FULL_DATE("yyyy-MM-dd"), /** * 时分秒 */ FULL_TIME("HH:mm:ss"), /** * 年月日时分秒 */ FULL_DATETIME("yyyy-MM-dd HH:mm:ss"), ; privatefinal String value;}如上,我们声明这个枚举类之后,就可以为这个枚举添加一些我们需要的方法了:2.2 添加方法@Getter@AllArgsConstructorpublicenum DateTimeFormatter { // 省略定义的枚举项目 ; // 枚举项封装的值 privatefinal String value; /** * 使用这个模板格式化毫秒时间戳 * * @param milliSecond 毫秒时间戳 * @return 格式化后的字符串 */ publicfinal@NotNullString format(long milliSecond) { return DateTimeUtil.format(milliSecond, this); } /** * 使用这个模板格式化当前时间 * * @return 格式化后的字符串 */ publicfinal@NotNullString formatCurrent() { return format(System.currentTimeMillis()); }}2.3 调用示例所以封装完毕之后,我们就可以用这两个方法来实现本文提到的 「枚举形参倒置」 了:export class DateTimeFormatter extends AirEnum { static readonly FULL_DATETIME = new DateTimeFormatter( 'yyyy-MM-dd HH:mm:ss', '年-月-日 时:分:秒' ) static readonly FULL_DATE = new DateTimeFormatter( 'yyyy-MM-dd', '年-月-日' ) static readonly FULL_TIME = new DateTimeFormatter( 'HH:mm:ss', '时-分-秒' )}我们的枚举就声明好了,当然这里的 「例子🌰」 其实是多余的,因为 「DateTimeFormatter」 这种几乎好像大概应该也许是没有什么符合字典业务场景的。❝当然,为了举例,你就假设它有。❞3.2 添加方法接下来,我们也同样实现这两个方法:export class DateTimeFormatter extends AirEnum<string> {// 一些静态枚举项目/** * 格式化毫秒时间戳 * @param timestamp 毫秒时间戳 */ format(timestamp: number) { return AirDateTime.formatFromMilliSecond(timestamp) }/** * 格式化当前时间 */ formatCurrent() { returnthis.format(Date.now().valueOf()) }}如上,我们实现了和 「Java」 一样的方法,然后就可以在调用的时候使用这个方法了:3.3 调用示例AI编程资讯AI Coding专区指南:
点击"阅读原文"了解详情~
