参考文章(https://segmentfault.com/a/1190000012220863)
概念
枚举类型是 Java 5 中新增特性的一部分,它是一种特殊的数据类型,它的特点就是使我们的代码更加简洁,安全,从某种程度来说,使我们可以站在全局的角度更加清晰的理解业务逻辑
定义
首先使用 enum 来定义一个枚举类;然后每个枚举值(即声明的枚举)是使用逗号隔开,如果枚举值后面还有操作代码,那么在最后一个枚举值后面加上分号结尾;最后一定要记住,枚举类中声明的每一个值都是一个实例,也就是说有 n 个枚举值,构造函数就被调用 n 次来创建出 n 个枚举实例
枚举类总结
枚举类中的枚举值可以没有参数,也可以有多个参数,每一个枚举值都是一个实例;并且还有一点很重要,就是如果枚举值有 n 个参数,那么构造函数中的参数值肯定有 n 个,因为声明的每一个枚举值都会调用构造函数去创建实例,所以参数一定是一一对应的;既然明白了这一点,那么我们只需要在枚举类中把这 n 个参数定义为 n 个成员变量,然后提供对应的 get() 方法,之后通过实例就可以随意的获取实例中的任意参数值了。
实战——使用枚举类将硬编码替换为软编码
创建枚举类
public enum MessageMeta {
// 通过构造函数传递参数并创建实例
ErrorNum("数字输入必须正整数"),
ErrorMoney("金额必须大于0"),
insertBillDetailError("添加账单详情记录失败"),
insertMoneySendDetailError("添加子红包记录失败"),
insertMoneySendError("添加红包发送记录失败"),
updateAccountError("更新账户失败"),
shouldUseTransfer("金额超出限制必须使用转账"),
accountNotEnough("余额不足"),
sendError("发送失败"),
sendSuccess("发送成功"),
receiveSuccess("接收红包成功"),
receiveError("接收红包失败"),
noId("无此红包id"),
errorId("输入id不允许小于1"),
infoAbove("成功,反馈信息如下"),
receiveByOthers("领取失败,此红包已经被%s领取"),
luckyMoneyInfo("红包情况为%s"),
deleteSuccess("删除红包成功"),
deleteError("删除失败"),
typeError("类别信息添加失败"),
typeSuccess("类别信息添加成功"),
overLimit(",超过限制"),
sendNum(",你已经发送了%d个红包了"),
receiveRepeat(",你已经领取过他发的红包了,请勿重复领取");
// 定义实例对应的参数
private String msg;
// 必写:通过此构造器给枚举值创建实例
MessageMeta(String msg) {
this.msg = msg;
}
// 通过此方法可以获取到对应实例的参数值
public String getMsg() {
return msg;
}
}
枚举类的应用
@Override
public LuckyMoney receiveLuckyMoney(LuckyMoney luckyMoney) throws BusinessException {
LuckyMoney result;
LuckyMoney verify = luckyMoneyMapper.findById(luckyMoney.getId());
if (verify == null) {
throw new BusinessException(MessageType.noId.getMsg());
}
if (verify.getConsumer() != null) {
//String.format()
throw new BusinessException(String.format
(MessageType.receiveByOthers.getMsg(), verify.getConsumer()));
}
if (luckyMoneyMapper.update(luckyMoney) == 0) {
throw new BusinessException(MessageType.receiveError.getMsg());
}
result = luckyMoneyMapper.findById(luckyMoney.getId());
return result;
}
在这个实战例子中,还有一些内容会在后面叙述到
——自定义异常处理应用时优化部分代码
人为抛出异常处理
——replace()方法替换的应用
replace()方法
——String.format()的应用
String.format()