枚举的出现是用来代替有限元素的数组,数组一点不好的是,它的元素一旦被存放进去就“不可见”了,这对于程序员来说是一件痛苦的事,而枚举的意义在于有限的元素个数,而且是“可预见”的,这一点非常重要,它再软件开发中的一点价值就是,可以规避用户的“不友好”的试探操作产生的异常。例如,现在有一个需求:图片的后缀由用户动态输入,这是一件很危险的事情,因为你无法预料到用户会输入什么稀奇古怪的字符。我们可以使用枚举“限制”用户的操作,这就像前段中的下拉选择框一样,在有限的下拉列表中进行选取。代码如下所示。
package com.yx.yzh.enums;
public enum QRCodePictureTypeEnum {
JPG,PNG,GIF,JPEG
}
1、我们可以将其应用到相应的方法中:
public static String uploadLogoQRCode(String content,String logoPicFilePathAndName,String exportFilePath,String exportFileName,**QRCodePictureTypeEnum qRCodePictureTypeEnum**,int width){
/*String qRCodeFormat = "";
//判断文件类型
if(qRCodePictureTypeEnum == QRCodePictureTypeEnum.GIF){
qRCodeFormat = "gif";
}else if(qRCodePictureTypeEnum == QRCodePictureTypeEnum.JPEG){
qRCodeFormat = "jpeg";
}else if(qRCodePictureTypeEnum == QRCodePictureTypeEnum.JPG){
qRCodeFormat = "jpg";
}else if(qRCodePictureTypeEnum == QRCodePictureTypeEnum.PNG){
qRCodeFormat = "png";
}*/
File exportFilePathObj = new File(exportFilePath);
if(!exportFilePathObj.exists()){
exportFilePathObj.mkdirs();
}
//获取导出文件对象
File exportFile = new File(exportFilePath+"\\"+exportFileName+"."+qRCodePictureTypeEnum.toString().toLowerCase());
try{
//获取图片流
BufferedImage bim = MatrixToImageWriter.getQRCodeBufferedImage(content, BarcodeFormat.QR_CODE, width);
//生成带logo的二维码图片
return MatrixToImageWriter.addLogoToQRCode(bim, new File(logoPicFilePathAndName),exportFile,width);
}
catch (Exception e){
e.printStackTrace();
}
return null;
}
这样一来,用户就只能在QRCodePictureTypeEnum qRCodePictureTypeEnum这个位置输入枚举中的元素了,可以规避一些用户非法操作,值得注意的是,使用枚举.元素返回的是枚举引用类型,通过枚举引用.toString()可以获得枚举元素的字符形式,这是两个很有用的技巧。
2、枚举项与构造器
package com.yx.yzh.webtest;
public enum MyGender {
MAN(0,“男”), WOMEN(1,“女”);
private final int value;
private final String name;
Gender(int value, String name) {
this.value = value;
this.name = name;
}
public int getValue() {
return value;
}
public String getName() {
return name;
}
}
/**
System.out.println(MyGender.MAN.getName());
output:
男
*/
3、枚举项可以是方法
package com.yx.yzh.webtest;
public enum MyOrderState {
/** 已取消 */
CANCEL {public String getName(){return "已取消";}},
/** 待审核 */
WAITCONFIRM {public String getName(){return "待审核";}},
/** 等待付款 */
WAITPAYMENT {public String getName(){return "等待付款";}},
/** 正在配货 */
ADMEASUREPRODUCT {public String getName(){return "正在配货";}},
/** 等待发货 */
WAITDELIVER {public String getName(){return "等待发货";}},
/** 已发货 */
DELIVERED {public String getName(){return "已发货";}},
/** 已收货 */
RECEIVED {public String getName(){return "已收货";}};
public abstract String getName();
}
/**
System.out.println(MyOrderState.CANCEL.getName());
output:
已取消
*/