枚举的使用
枚举相当于一个数据库,性能要比数据库好的多,不用建立连接释放连接之类的。
枚举的应用场景,比如我想定义一个1对应燕国,2对应赵国,3对应韩国…又便于后期的修改,配置一些对象,不用配置到数据库中就可以,就可以用枚举。
比如有这么一个业务场景,需要让燕国,赵国…七国都消灭了,秦国才能一统天下。
枚举对象都是单例的。
可以设计一个这么一个枚举:
public enum enumDemo {
one(1,"燕国"),
two(2,"齐国"),
three(3,"楚国"),
fore(4,"韩国"),
five(5,"赵国"),
six(6,"魏国"),
senven(7,"秦国"),
;
private int num;
private String message;
enumDemo(int num, String message){
this.num = num;
this.message = message;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
/**
* 由key得到这个枚举对象
* @param val
* @return
*/
public static enumDemo getvalue(int val){
enumDemo[] values = enumDemo.values(); //得到所有的枚举对象数组
for (enumDemo demo:values) {
if(demo.getNum() == val){
return demo;
}
}
return null;
}
}
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(6); //初始计数为6
for(int i=1;i<=6;i++){
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"被灭");
countDownLatch.countDown(); //计数--
}
},**enumDemo.getvalue(i).getMessage()**).start();
}
countDownLatch.await(); //主线程一直等待直到countDownLatch变量减到0才开始执行
System.out.println("秦国一统天下");
}
结果:
燕国被灭
齐国被灭
楚国被灭
韩国被灭
赵国被灭
魏国被灭
秦国一统天下
自定义异常,里面传一个枚举对象,也是企业常用的一种方式
代码如下:
@AllArgsConstructor
@NoArgsConstructor
@Getter
public enum exceptionEnum {
BRAND_NOT_FOND(404,"品牌没找到"), //创建一个对象,枚举类型的对象类似于单例,
CATAGORY_NOT_FOND(404,"商品分类没查到"), //注意最后以逗号分隔
SPEC_GROUP_NOT_FOND(404,"规格组没找到"),
SPUDETAIL_NOT_FOND(404,"SPUDetail没找到"),
SKU_NOT_FOND(404,"sku没找到"),
SPEC_PARAM_NOT_FOND(404,"规格参数没找到"),
BRAND_SAVE_ERROR(500,"新增品牌失败"),
SPU_SAVE_ERROR(500,"新增商品失败"),
SPU_NOT_FOND(404,"SPU没找到"),
SPEC_GROUP_SAVE_ERROR(500,"新增规格组失败"),
SPEC_PARAM_SAVE_ERROR(500,"新增规格参数失败"),
SPEC_GROUP_UPDATE_ERROR(500,"编辑规格组失败"),
SPEC_PARAM_UPDATE_ERROR(500,"编辑规格参数失败"),
SPEC_GROUP_DELETE_ERROR(500,"删除规格组失败"),
SPEC_PARAM_DELETE_ERROR(500,"删除规格参数失败"),
UPLOAD_ERRO(500,"文件上传失败"),
INVALID_FILE_TYPE(400,"无效的文件类型"),
INVALID_DATA_TYPE(400,"无效的数据类型"),
UPDATE_BRAND_ERROR(405,"更新品牌失败"),
;
private int code; //状态码
private String message; //提示信息
}
//自定义异常
public class lyException extends RuntimeException {
private exceptionEnum exceptionEnum;
public com.ly.Enum.exceptionEnum getExceptionEnum() {
return exceptionEnum;
}
public lyException(exceptionEnum exceptionEnum){
this.exceptionEnum=exceptionEnum;
}
}
在哪个地方抛异常就
throw new lyException(传一个枚举对象);