如何在TypeScript里使用类封装枚举来实现Java的枚举形参倒置
一、前言首先,「枚举形参倒置」的意思是通过为枚举形参添加一些方法,来减少调用时候传入的形参个数。
「??举个栗子」
longtimestamp = System.currentTimeMillis();
// before
DateTimeUtil.format(timestamp, DateTimeFormatter.FULL_DATE);
// after
DateTimeFormatter.FULL_DATE.format(timestamp);
如上示例代码,我们可以在调用时候减少传入一个枚举形参的传入,写出来的代码会更加简洁好看。
?还有其他好处吗?
好像没有了...
?当然,我们不讨论这两种写法的好处和坏处「(评论区可以讨论)」,我们只聊实现。
二、Java 的实现众所周知,在「Java」中,枚举本身也是类的特殊封装,而枚举项可以认为是「Java」类的静态实例常量,所以,我们很轻易的就能实现:
2.1 封装枚举类@Getter
@AllArgsConstructor
publicenumDateTimeFormatter {
/**
* 年月日
*/
FULL_DATE("yyyy-MM-dd"),
/**
* 时分秒
*/
FULL_TIME("HH:mm:ss"),
/**
* 年月日时分秒
*/
FULL_DATETIME("yyyy-MM-dd HH:mm:ss"),
privatefinalString value;
}
如上,我们声明这个枚举类之后,就可以为这个枚举添加一些我们需要的方法了:
2.2 添加方法@Getter
@AllArgsConstructor
publicenumDateTimeFormatter {
// 省略定义的枚举项目
// 枚举项封装的值
privatefinalString value;
/**
* 使用这个模板格式化毫秒时间戳
*
*@parammilliSecond 毫秒时间戳
*@return格式化后的字符串
*/
publicfinal@NotNullStringformat(longmilliSecond){
returnDateTimeUtil.format(milliSecond,this);
}
/**
* 使用这个模板格式化当前时间
*
*@return格式化后的字符串
*/
publicfinal@NotNullStringformatCurrent(){
returnformat(System.currentTimeMillis());
}
}
2.3 调用示例所以封装完毕之后,我们就可以用这两个方法来实现本文提到的「枚举形参倒置」了:
三、TypeScript 的实现可是在「TypeScript」中,「枚举」并没有像「Java」那样,有「枚举封装」的特性,所以,我们只能通过「类」来实现这个功能了。可以参考我们这篇文章:TypeScript使用枚举封装和装饰器优雅的定义字典。今天我们就不赘述之前的设计了,可以先阅读之后继续下面的内容。
3.1 封装枚举类exportclassDateTimeFormatterextendsAirEnum {
staticreadonly FULL_DATETIME =newDateTimeFormatter(
'yyyy-MM-dd HH:mm:ss','年-月-日 时:分:秒'
)
staticreadonly FULL_DATE =newDateTimeFormatter(
'yyyy-MM-dd','年-月-日'
)
staticreadonly FULL_TIME =newDateTimeFormatter(
'HH:mm:ss','时-分-秒'
)
}
我们的枚举就声明好了,当然这里的「例子??」其实是多余的,因为「DateTimeFormatter」这种几乎好像大概应该也许是没有什么符合字典业务场景的。
?当然,为了举例,你就假设它有。
?3.2 添加方法接下来,我们也同样实现这两个方法:
exportclassDateTimeFormatterextendsAirEnumstring {
// 一些静态枚举项目
/**
* 格式化毫秒时间戳
* @param timestamp 毫秒时间戳
*/
format(timestamp:number) {
returnAirDateTime.formatFromMilliSecond(timestamp)
}
/**
* 格式化当前时间
*/
formatCurrent() {
returnthis.format(Date.now().valueOf())
}
}
如上,我们实现了和「Java」一样的方法,然后就可以在调用的时候使用这个方法了:
3.3 调用示例四、总结本文通过类的封装,来实现了枚举功能以及「枚举形参倒置」的功能。
AI编程资讯AI Coding专区指南:
https://aicoding.juejin.cn/aicoding
点击"阅读原文"了解详情~
阅读原文
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。 项目经理在线